我有一个名为 RDIBits 的12位向量和一个名为 InUartToUart 的std_logic。我的问题是:每当时钟进入' 1'时,我会收到 InUartToUart 中的一些内容,我想连接我将在 RDIBits 向量。基本上,它是一个串行通信,这就是我每次收到1位的原因。有没有简单的方法来做到这一点?类似于JAVA中的 RDIBits + = InUartToUart 。
答案 0 :(得分:1)
我添加了更多内容,例如实体,IO和输出寄存器的计数器。
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
ENTITY my_uart IS
PORT(
clk : IN std_logic; -- system clock
rst : IN std_logic; -- reset high active
---------------------------------------------
InUartToUart : IN std_logic;
DataOut : OUT std_logic_vector(11 downto 0)
);
END ENTITY;
ARCHITECTURE struct OF my_uart IS
signal RDIBits : std_logic_vector(11 downto 0);
signal counter : integer range 0 to 12;
begin
calc_proc: process(clk, rst)
begin
if (rst = '1') then
RDIBits <= (others => '0');
counter <= 0;
elsif ( rising_edge(clk) ) then
if (counter < 12) then
RDIBits <= RDIBits(10 downto 0) & InUartToUart;
counter <= counter + 1;
elsif (counter = 12) then
DataOut <= RDIBits;
counter <= 0;
end if;
end if;
end process;
END STRUCT;
答案 1 :(得分:1)
我的编码方式略有不同。也许考虑一下。 抱歉格式化,我是这个网站的新手。我还展示了如何初始化变量。
signal RDIBits : std_logic_vector(11 downto 0) := (Others => '0');
...
process(clk)
begin
if ( rising_edge(clk) ) then
RDIBits(11 downto 1) <= RDIBits(10 downto 0);
RDIBits(0) <= InUartToUart;
end if;
end process;
答案 2 :(得分:0)
这是典型的移位寄存器应用程序。例如:
signal RDIBits : std_logic_vector(11 downto 0);
...
process(clk)
begin
if ( rising_edge(clk) ) then
RDIBits <= RDIBits(10 downto 0) & InUartToUart;
end if;
end process;