我正在为我的 Nexys2 板编写 RS232 模块。我目前的波特率控制器有问题,我想将其设置为 19200。
为此,我使用了 Mod-M 计数器,经过多次 ISim 模拟后,我的代码的问题在于 mod-m 计数器,因为它没有产生任何滴答声。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity baud_rate is
generic (
N: integer := 8;
M: integer :=163);
Port (clk, reset : in STD_LOGIC;
tick : out STD_LOGIC;
q : out STD_LOGIC_VECTOR(N-1 downto 0));
end baud_rate;
architecture Behavioral of baud_rate is
signal r_reg : unsigned(N-1 downto 0);
signal r_next : unsigned(N-1 downto 0);
begin
process(clk,reset)
begin
if (reset ='1') then
r_reg <= (others=>'0');
elsif(clk'event and clk='1') then
r_reg <= r_next;
end if;
end process;
r_next <= (others =>'0') when r_reg=(M-1) else r_reg+1;
tick <='1' when r_reg=(M-1) else '0';
q <= std_logic_vector(r_reg);
end Behavioral;
我已经测试了所有的 clk 输入并且运行良好,问题似乎出在 r_reg 和 r_next 寄存器上。在 ISim 中,当在 q 上输出其中任何一个时,我得到 UUUUUUUU,因此它们似乎没有产生信号。由此我可以推断出两个 r_reg 和 r_next 寄存器没有被创建或存储值,使用无符号时是否有问题?
为了确保三重,我什至已经从使用 VHDL 的 FPGA Prototyping 一书中复制了 mod-m 计数器(这是显示的代码)但是这仍然不起作用并且 q 输出是 UUUUUUUU。
如果有任何更好的方法可以从 nexys2 50mz 时钟创建波特率,那也将不胜感激!
干杯