次のような警告が表示されます。
常にブロックの感度リストに1つ以上の信号がありません。
always@(Address)begin
ReadData = instructMem[Address];
end
この警告を取り除くにはどうすればよいですか?
Verilogでは、感度リストに信号名は必要ありません。@*
構文を使用してalways
、入力信号のいずれかが変更されるたびにブロックがトリガーされる必要があることを示します。
always @* begin
ReadData = instructMem[Address];
end
感度リストにInstructMemを追加します。
ReadData
regではなくwireとして宣言してから、alwaysブロックをassignに置き換えます。
assign ReadData = instructMem[Address];
instructMemの宣言がどのようになっているのかわかりません。とにかく、ReadData = instructMem [address]は、アドレスが選択ロジックとして扱われ、一般的な合成ツールを使用してマルチプレクサのデータラインとしてinstructMemとして扱われるマルチプレクサになります。これが変更されるたびにReadDataも変更されるため、感度リストにinstructMemを追加する必要があります。
私はIcarusを試しましたが、とにかく常に@(instructMemまたはaddress)のようなことはできません。ここで、instructMemにはreg [7:0] instructMem [255:0]->メモリを意味する宣言があります。
注:この方法でVerilogメモリを合成しようとしないでください。通常、メモリIPをインスタンス化して、それらのポートに接続することになっています。ベンダーは、そのような目的のためにメモリモデルを提供しています。