1

私はまだ VHDL のいくつかの癖に慣れようとしていますが、少し問題があります。まず、rol、ror、ssl、srl などのシフト演算子は合成できないことを理解しています。このラボの目的は、ゴールデン モデルを使用して、テストベンチで同じものの合成可能なバージョンと照合することです。

このプログラムの目的は、温度計コードを 3 ビットの 2 進数に変換することです。つまり、温度計コード「00000001」=「001」、「00000011」=「010」、「00000111」=「011」など、基本的に文字列の1の数を右から数えようとしています左へ。1 のストリングの間に '0' が配置されることはありません。そのため、ベクトル "00011101" は無効であり、決して発生しません。

私は、どのように機能させるかを理解できない、合成不可能な (そしてこれまでのところ、コンパイル不可能な) アルゴリズムを考案しました。基本的には、温度計コードを読み取り、それを右にシフトして、温度計コードがゼロになるまでカウンターをインクリメントし、そのカウンター値を 3 ビットの std_logic_vector に割り当てるという考え方です。以下は、これまでに行ったコードです。

library ieee;
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all;

entity therm2bin_g is
    port(therm : inout std_logic_vector(6 downto 0); -- thermometer code
         bin : out std_logic_vector(2 downto 0); -- binary code 
         i : integer range 0 to 7);
end therm2bin_g;    

architecture behavioral_g of therm2bin_g is
begin

golden : process(therm)
begin

    while(therm /= "00000000") loop
        therm <= therm srl 1;
        i = i + 1;      
    end loop;

    bin <= std_logic'(to_unsigned(i,3));

end process golden;
behavioral_g;
4

2 に答える 2

1

これは合成可能なバージョンです。whileループはforループに置き換えられます。srlは明示的に実装されています。

entity therm2bin_g is
port(therm : inout std_logic_vector(6 downto 0); -- thermometer code
     bin : out std_logic_vector(2 downto 0); -- binary code 
     i : out integer range 0 to 7);
end therm2bin_g;    

architecture behavioral_g of therm2bin_g is
begin

golden : process(therm)
    variable i_internal: integer range 0 to 7;
begin
    i_internal:=0;
    for idx in 0 to therm'length loop
        if therm/="0000000" then
            therm<='0' & therm(therm'left downto 1);
            i_internal := i_internal + 1;     
        end if;
    end loop;

    bin<=std_logic_vector(to_unsigned(i_internal,bin'length));
    i<=i_internal;

end process golden;
end behavioral_g;
于 2013-03-29T06:32:47.857 に答える
1

「... rol、ror、ssl、srl などの演算子は合成可能ではありません...」誰の権限で誰が言ったのですか? チェックしましたか?どの合成ツールで?それは最近のバージョンですか、それとも 1990 年代初頭のバージョンですか?

一部のツールサポートしていない可能性があるという議論は、ばかげていることに注意してください。一部のキッチンにはオーブンがないかもしれないという事実は、人々がケーキのレシピを書くことを止めるものではありません.

于 2013-03-30T15:31:55.600 に答える