我有一个问题可能分为两部分:
我正在使用一个(名义上为 32 位)整数变量,我想将它作为 4 个字节(即作为二进制数据)写入 8 位 UART
即变量Count:整数范围0到2147483647;
我应该如何按照我的 UART 代码的预期将 32 位整数变量切割成 4 个单独的 8 位 std_logic_vectors,我应该如何一次将这些传递给 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;
任何意见或建议将不胜感激。
谢谢,
MAI-AU。