我正在尝试在代码中创建一个非常具体的信号。基本上,我需要在load_0结束后的下降沿生成一个信号,该信号将是1KHz信号的10个脉冲,其余的为0。仅保留与变量Serial_out对齐的10个脉冲。
因此,到目前为止,我已经尝试过是否要尝试此操作,并使用一个计数器尝试对我想要的10个脉冲计数到10,然后丢弃其余的脉冲。这总是会因为错误而无法合成,或者永远不会初始化测试台clk_trig。
由于我没有使用xilinx很久了,所以我的编码非常粗糙。
代码的主要部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY HAMMING IS
PORT ( CLK_50MHz_M : IN STD_LOGIC;
RST : IN STD_LOGIC;
LOAD_O : IN STD_LOGIC;
input1 : IN STD_LOGIC;
input2 : IN STD_LOGIC;
input3 : IN STD_LOGIC;
input4 : IN STD_LOGIC;
input5 : IN STD_LOGIC;
input6 : IN STD_LOGIC;
CLK_DIV_O : OUT STD_LOGIC;
CLK_TRIG : OUT STD_LOGIC;
Serial_out : OUT STD_LOGIC);
END HAMMING;
ARCHITECTURE ARCH OF HAMMING IS
SIGNAL input_vec : STD_LOGIC_VECTOR(6 DOWNTO 1);
SIGNAL output : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL CLK_100Hz, CLK_50KHz : STD_LOGIC;
COMPONENT P2S
port(
clk : in STD_LOGIC;
reset : in STD_LOGIC;
load : in STD_LOGIC;
din : in STD_LOGIC_VECTOR(9 downto 0);
dout : out STD_LOGIC);
END COMPONENT;
COMPONENT SCALE_CLOCK
PORT (CLK_50MHz_S : IN STD_LOGIC;
RST : IN STD_LOGIC;
CLK_100Hz : OUT STD_LOGIC);
END COMPONENT;
begin
----------------------------------------------
process (LOAD_O, CLK_100Hz)
begin
if (LOAD_O = '1') then CLK_TRIG <= '0'; -crude attempt at the desired signal
ELSE
CLK_TRIG <= CLK_100Hz;
end if;
end process;
---------------------------------------------
-- BITS DE PALABRA
output(2) <= input_vec(1);
output(4) <= input_vec(2);
output(5) <= input_vec(3);
output(6) <= input_vec(4);
output(8) <= input_vec(5);
output(9) <= input_vec(6);
-- BIT PARIEDAD
output(0) <= input_vec(1) XOR input_vec(2) XOR input_vec(4) XOR input_vec(5);
output(1) <= input_vec(1) XOR input_vec(3) XOR input_vec(4) XOR input_vec(6);
output(3) <= input_vec(2) XOR input_vec(3) XOR input_vec(4);
output(7) <= input_vec(5) XOR input_vec(6);
ClockDiv: SCALE_CLOCK PORT MAP(CLK_50MHz_S => CLK_50MHz_M, RST => RST, CLK_100Hz => CLK_100Hz);
SeriesOut: P2S PORT MAP(clk => CLK_100Hz, din => output, dout => Serial_out, reset => RST, load => LOAD_O);
CLK_DIV_O <= CLK_100Hz;
input_vec <= input1 & input2 & input3 & input4 & input5 & input6;
END ARCH;
答案 0 :(得分:0)
您有一个50MHz的时钟。
因此,您可能决定制作一个不错的50/50 100Hz时钟,然后使用它。
那是错误的策略!
您总是希望尽可能多地进行同步设计。
如果您希望信号以100Hz的频率变化,则正确的(同步)方法如下:
if P100Hz then
您现在有了一个有效运行在100Hz的同步设计。