基于fpga数字跑表的设计(编辑修改稿)内容摘要:

library IEEE。 use。 use。 use。 entity XD is Port ( clk1k : in STD_LOGIC。 keyin : in STD_LOGIC。 keyout : out STD_LOGIC)。 end XD。 architecture Behavioral of XD is signal key1,key2:std_logic。 signal count:integer range 1 to 3:=1 begin process(clk1k,keyin) begin if clk1k39。 event and clk1k=39。 139。 then if count=3 then key1=39。 139。 else key1=39。 039。 count=count+1。 end if。 key2=key1。 end if。 if keyin=39。 039。 then count=1。 end if。 end process。 keyout=(not key1) and key2。 end Behavioral。 仿真波形图 6 如下 : 在按键按下的一个周期 内,消抖模块输出仅有一个时钟周期, 抑制了按键按下状态不稳的情况。 计数器 十进制计数器是每当计数从 1 记到 9 时 ,下一位产生一个进位信号 ,进而输入到下一个计数器的时钟输入端 ,进而达到秒表所要求的计数进制 .计数器是在时钟基准信号的情况下 ,分频为我们需要的计时时间信号 ,电子秒表的最低位为 秒 ,即需要 100Hz 的脉冲 ,当最低一位计数满 9 时 ,向前进 1,同时自身为 0,重复循环 . 本设计中采用的是异步计时器 ,当上一位计数到 9时 ,产生时钟进位 ,下一时钟在进位成立时 ,开始计时加 1,以此内推 ,最终输出 6 组 ,计时信号 ,分别是 秒位 , 秒位 ,秒个位 ,10 秒十位 ,分个位 ,分十位 .当计数到 59’59’ 59 时计数清零为 00’00’ 00 重复计时 .数字跑表需要用六位七段数码管显示 ,数码管显示数字分别用 2个 6进制计数器和 4个 10 进制计数器对其计数 ,从秒表显示的右侧到左侧计数器分别为十进制、十进制、十进制、六进制、十进制、六进制、十进制计数器 ,如图 7 所示: 图 7 数码管显示示意图 计数器的设计图如下: 10 进制计数器的框图如下 : 图 8 10 进制计数器的框图 6 进制计数器的框图如下 : 图 9 6 进制计数器的框图 相应 程序设计如下 : 10 进制程序设计如下 : library IEEE。 use。 use。 use。 entity count101 is Port ( rst : in STD_LOGIC。 clk : in STD_LOGIC。 carryin : in STD_LOGIC。 carryout : out STD_LOGIC。 countout : out STD_LOGIC_VECTOR (3 downto 0))。 end count101。 architecture Behavioral of count101 is 11 signal count:STD_LOGIC_VECTOR (3 downto 0):=0000。 begin process(clk,rst) begin if rst=39。 139。 then count=0000。 else if rising_edge (clk) then if carryin=39。 139。 then if count1001 then count=count+1。 else count=0000。 end if。 end if。 else null。 end if。 end if。 end process。 countout=count。 carryout=39。 139。 when carryin=39。 139。 and count=1001 else 39。 039。 end Behavioral。 6 进制程序设计如下 : library IEEE。 use。 use。 use。 entity count6 is Port ( rst : in STD_LOGIC。 clk : in STD_LOGIC。 carryin : in STD_LOGIC。 carryout : out STD_LOGIC。 countout : out STD_LOGIC_VECTOR (3 downto 0))。 end count6。 architecture Behavioral of count6 is signal count:STD_LOGIC_VECTOR (3 downto 0):=0000。 begin process(clk,rst) begin if rst=39。 139。 then count=0000。 else if rising_edge (clk) then if carryin=39。 139。 then if count0101 then count=count+1。 else count=0000。 end if。 end if。 else null。 12 end if。 end if。 end process。 countout=count。 carryout=39。 139。 when carryin=39。 139。 and count=0101 else 39。 039。 end Behavioral。 仿真波形如 下 图: 10 进制的仿真波形如下 : 图 10 10 进制 计数器 仿真图形 由图可见 ,设计模块对波形个数计数 ,从产生结果为 2 进制的 4 位数 .从 0000到 1001,结果正确 . 6 进制的仿真波形如下 : 图 11 6 进制 计数器 的仿真波形 有图可知 ,6 进制计数器设计正确 ,脉冲时钟上升沿到来时计数器开始计数 ,从 0000 到 1001,然后重复循环 . 寄存器 数据锁存器 ,在使能为 1时 ,将当前数据送到寄存器中保存 ,可记录 4组数据 ,当再次使能时 ,将寄存的数据赋给输出 ,显示寄存器中的 4 组数据 . 设计框图 如下图 : 图 12 寄存器设计框图 寄存器 程序 设计如下 : library IEEE。 use。 13 use。 use。 entity save2 is Port ( lacthin : in STD_LOGIC。 reset : in STD_LOGIC。 mhin : in STD_LOGIC_VECTOR (3 downto 0)。 mlin : in STD_LOGIC_VECTOR (3 downto 0)。 shin : in STD_LOGIC_VECTOR (3 downto 0)。 slin : in STD_LOGIC_VECTOR (3 downto 0)。 dsin : in STD_LOGIC_VECTOR (3 downto 0)。 csin : in STD_LOGIC_VECTOR (3 downto 0)。 mhout : out STD_LOGIC_VECTOR。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。