2012-01-24 16 views
11

こんにちは私はこのコマンドを置き換える方法を見つけようとしています:Bus_S <= "0000000000000000000000000000000" & Ne;より便利なものがあります。ゼロを1つずつ数えることはあまり洗練されていません。このプログラムは、mips形式のALUのSLTユニットに関するものです。 SLTは1ビット(ADDSU32のMSB)しか得ず、32ビットすべての出力が0であるが、ADDSU32のNe = MSBに依存する最初のビットを有する。 (PLZ当分の間ALUopを無視する)VHDLで複数のゼロを含む出力を宣言する方法

entity SLT_32x is 
    Port (Ne : in STD_LOGIC; 
     ALUop : in STD_LOGIC_VECTOR (1 downto 0); 
     Bus_S : out STD_LOGIC_VECTOR (31 downto 0)); 
end SLT_32x; 

architecture Behavioral of SLT_32x is 
begin 
    Bus_S <= "0000000000000000000000000000000" & Ne; 
end Behavioral; 

が使用する方法(0とdownto 30)= '0' またはそのような何かですか?ありがとう。

+1

も動作するはずありがとう: '定数C:STD_LOGIC_VECTOR(0とdownto 30):=(他を=> '0');' '開始 Bus_S <= C & Ne; Ne_out <=ネ;' – BugShotGG

答えて

24

これを試してください:bus_S <= (0 => Ne, others => '0') 意味:ビット0をNeに設定し、他のビットを '0'に設定します。与えられた答えに

1

代替:

architecture Behavioral of SLT_32x is 
begin 
    Bus_S <= (others => '0'); 
    Bus_S(0) <= ne; 
end Behavioral; 

常にcombinatoricプロセスの最後の割り当てが考慮されます。これは、大部分のケースに対してデフォルト割り当てを行った後、特別なケースを追加する、すなわち階層ブロックを介してワイドバス(レコードとして定義)を送り、いくつかの信号を変更するだけで、非常に読みやすいコードになります。

+0

このプロセス内で実行する必要があります。それ以外の場合は動作しません。少なくともModelSim-Altera 10.3dにはない – iSWORD

関連する問題