【例lab-5】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY PULSE IS
PORT ( CLK : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
FOUT : OUT STD_LOGIC );
END;
ARCHITECTURE one OF PULSE IS
SIGNAL FULL : STD_LOGIC;
signal CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
P_REG: PROCESS(CLK) ------进程
VARIABLE temp : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
temp(6 downto 0):=D(7 downto 1);
IF CLK'EVENT AND CLK = '1' THEN
IF CNT8 = "00000000" THEN
CNT8 <=temp-1; --当CNT8计数到0时,输入数据D被同步预置给计数器CNT8
FULL <= '1'; --同时使溢出标志信号FULL输出为高电平
ELSE CNT8 <= CNT8 - 1; --否则继续作加1计数
FULL <= '0'; --且输出溢出标志信号FULL为低电平
END IF;
END IF;
END PROCESS P_REG ;
P_DIV: PROCESS(FULL)------------进程
VARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL = '1'
THEN CNT2 := NOT CNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反
IF CNT2 = '1' THEN FOUT <= '1';
ELSE FOUT <= '0';
END IF;
END IF;
END PROCESS P_DIV ;
END;---------------两个进程
思考:
1、为什么FULL和CNT8定义为信号,temp定义为变量?
2、此代码只能进行偶数分频,要求输入的数大于等于4, 如果要求输入的数大于等于2应该怎么修改?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
被verilog影响了
一周热门 更多>