我有一个问题,其可能是在2个部分:VHDL如何将32位变量转换为4 x 8位std_logic_vector?
我使用的(标称32位)整数变量,我想写入的8位UART为4个字节(即,作为二进制数据)
即变量Count:整数范围为0〜2147483647;
我应该如何砍32位整型变量为4个独立的8位std_logic_vectors我的UART代码如预期,我应该如何通过这些给UART一个字节的时间?
我知道std_logic_vector(to_unsigned(计数,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。