3

個々のビットまたはビットのグループにコメントを簡単に設定するために、std_logic_vector のビットを個別に設定したいと考えています。ここに私が持っているものがあります:

signal DataOut : std_logic_vector(7 downto 0);
...
DataOut <= (                        5=>'1',     -- Instruction defined
                                    4=>'1',     -- Data length control bit, high=8bit bus mode selected
                                    3=>'1',     -- Display Line Number ctrl bit, high & N3 option pin to VDD=3 lines display
                                    2=>'0',     -- Double height font type control byte, not selected
                                    1 downto 0=>"01",   -- Select Instruction table1
                                    others=>'0' -- for bits 6,7
                                    );

しかし、「downto」ステートメントに問題があり、ザイリンクス ISE を使用すると次のエラー メッセージが表示されます。

Type std_ulogic does not match with a string litteral

同等の使用を避けるための解決策

1=>'0',
0=>'1',

ブロックごとにビットを設定できるようにするには?

4

3 に答える 3

7

A が配列の要素の場合、代入X downto Y => 'A'は正しいです。たとえば、次のスニペットは正しいです。

1 downto 0 => '1',

そして、このスニペットは間違っています:

1 downto 0 => "01",

したがって、あなたの割り当ては違法です。コードとして、次のように割り当てることができます。

DataOut <= (                        5 downto 3 =>'1',     
                                    2 downto 1 =>'0',     
                                    0 => '1',  
                                    others=>'0' 
                                    );

配列のフィールドでアクセス/割り当てたい場合は、連結を使用できます。

DataOut <= Something_0 & Something_1 & "01";

ながらSomething_*_std_logic_vector

于 2013-03-11T15:34:56.353 に答える
3

もう 1 つの答えは、'&' を使用した連結です。これは、名前付きの関連付けの明確さを失いますが、名前付き定数を使用して自己文書化の一部を回復できます。

constant Instr_Defined : std_ulogic := '1';
constant Bus_8_Bit     : std_ulogic := '1';

DataOut <= "00" & Instr_Defined
                & Bus_8_Bit
                & '1'     -- description
                & '0'     -- ditto
                & "01";

もう 1 つの答えは、命令を作成する関数を作成することです。これにより、命令のエンコーディングを完全に分離して 1 つの場所に保持しながら、メイン フローを非常にシンプルかつ明確にすることができます。 CPUだけでなくアセンブラでも)

DataOut <= Encode_Instruction(Instr_Defined, Bus_8_Bit, Font_Mode);

関数本体では、どんなに冗長であっても、前述の手法のいずれを使用してもかまいません。明確で詳細であればあるほど良いです。メインのデザインがごちゃごちゃしていないので、命令フォーマットを変更しない限り、めったに見ることはありません。

于 2013-03-11T13:43:29.210 に答える
2

これを行う:

DataOut(7 downto 6)<="00";
DataOut(5)<='1';
DataOut(4)<='1';
DataOut(3)<='1';
DataOut(2)<='1';
DataOut(1 downto 0)<="01";
于 2013-03-11T11:25:20.843 に答える