おそらく2つの部分に分かれている質問があります:
8 ビット UART に 4 バイト (つまり、バイナリ データ) として書き込みたい (通常は 32 ビット) 整数変数を使用しています。
つまり、変数 Count : 0 から 2147483647 までの整数範囲。
UART コードで期待されるように、32 ビット整数変数を 4 つの個別の 8 ビット std_logic_vectors に切り刻むにはどうすればよいですか? また、これらを一度に 1 バイトずつ UART に渡すにはどうすればよいですか?
std_logic_vector(to_unsigned(Count, 32)) が整数変数を 32 ビットの std_logic_vector に変換することは承知していますが、その後はどうでしょうか? 32 ビットの std_logic_vector を作成し、変換された Count 値をそれに割り当ててから、次のコードのようなものを使用して分割する必要がありますか? 以下は、カウント変数が4クロックサイクル中に変化しないと仮定し、UARTがクロックサイクルごとに新しいバイトを受け入れることができ、4バイト送信サイクルを再トリガーする手段がないことを前提としていますが、私は正しいですかここで追跡しますか、それとももっと良い方法がありますか?
variable CountOut : std_logic_vector(31 downto 0);
process (clock)
variable Index : integer range 0 to 4 := 0;
begin
if rising_edge(clock) then
CountOut <= std_logic_vector(to_unsigned(Count, 32);
if (Index = 0) then
UartData(7 downto 0) <= CountOut(31 downto 24);
Index := 1;
elsif (Index = 1) then
UartData(7 downto 0) <= CountOut(23 downto 16);
Index := 2;
elsif (Index = 2) then
UartData(7 downto 0) <= CountOut(15 downto 8);
Index := 3;
elsif (Index =31) then
UartData(7 downto 0) <= CountOut(7 downto 0);
Index := 4;
else
Index := Index;
end if;
end if;
end process;
コメントや推奨事項をいただければ幸いです。
ありがとう、
マイアウ。