3

VHDL で非常に単純な演算子の問題があります。一部の入力を論理演算子と比較しようとしましたが、エラー メッセージが表示されます...

entity test is
 port (
  paddr              : in  std_logic_vector(15 downto 0);
  psel                : in  std_logic;
  penable              : in  std_logic;
  pwrite              : in  std_logic
 );  
end entity test;

signal wrfifo_full       : std_logic; 

process (paddr, psel, penable, pwrite, wrfifo_full) is
begin
  if (((paddr(8 downto 2) = "1000000")) and (psel and penable) and (pwrite and not(wrfifo_full))) then
    dt_fifo_wr_i <= '1';
  else
    dt_fifo_wr_i <= '0';
  end if;

最終過程;

残念ながら、次のエラーメッセージが表示されます。

if (((paddr(8 downto 2) = "1000000")) and (psel and penable) and (pwrite and not(wrfifo_full))) then | ncvhdl_p: *E,OPTYMM (hdl/vhdl/test.vhd,523|43): 演算子の引数の型が一致しません 87[4.3.3.2] 93[4.3.2.2] [7.2]

とにかく問題を見ますか?

乾杯

4

2 に答える 2

7

psel、penable、pwrite、およびwrfifo_fullはすべてstd_logicです。

vhdlでは、テストを自分のやり方で書くには、ブール値である必要があります。

代わりに、それらの値を1または0と比較するようにコードを記述してください。

(paddr(8 downto 2) = "1000000"     and 
 psel   = '1' and penable     ='1' and 
 pwrite = '1' and wrfifo_full = '0')
于 2010-10-26T10:33:47.693 に答える
5

ジョージが言ったように、現在、すべての std ロジックをブール値に変換する必要があります。

ただし、VHDL-2008 には新しい条件演算子 ( ??) があり、これはあなたのようなステートメントに暗黙的に適用されます。これは、期待どおりに機能することを意味します。コンパイラで VHDL-2008 のサポートを有効にする必要があります (または、時代に合わせてサプライヤに文句を言う必要があります :)

この本は、VHDL2008 が私たちに与えるすべての新しいビットの良い読み物です。

VHDL-2008 新しいものだけ

セクション 4.4 では、条件演算子について説明します

于 2010-10-26T10:52:43.640 に答える