vhdl写模十计数器(可任意选择)

本文详细介绍了新手如何使用VHDL设计一个模十计数器,包括确定输入输出变量、编写结构体部分以及计数器代码。通过设置时钟信号、系统复位和输出变量,实现模十计数。代码中采用状态暂存器保存计数值,并在每个时钟上升沿更新。当计数值达到模值时,计数器重置。仿真波形验证了设计的正确性。文章最后表达了作者作为新手的学习态度,期待得到专业人士的指导。
摘要由CSDN通过智能技术生成

新手(我)编写模十计数器的过程

一、实体部分,确定输入输出变量

输入变量一定有一个时钟信号,i_sys_clk

系统复位输入:i_sys_rst      

以及系统的输出变量output,模十应该是以四位向量的格式输出,故设置变量为逻辑位矢量类型std_logic_vector(3 downto 0)

二、编写结构体部分

        重点是:首先需要设置一个信号变量,用于结构的全局部分,以此来计数,因为output只能用于输出,不能在程序中进行赋值或者计算。

        判断i_sys_rst信号

        记得最后将计数器的暂存值赋给output进行输出

三、计数器代码

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;				--定义宏指令

entity counter_10 is

	generic(
		i_mod_value:integer:=9
		);				--模值设定参数,模值-1
		
	port(
		i_sys_clk: in std_logic;					--定义时钟输入信号
		i_sys_rst: in std_logic;					--系统复位信号
		output:out std_logic_vector(3 downto 0)--计数器的输出
		);
end entity;

architecture behavior of counter_10 is
	signal r_counter:std_logic_vector(3 downto 0);		--计数值暂存器		
begin
	process(i_sys_clk,i_sys_rst)			
	begin
	if(i_sys_rst = '1')	then 		--如果系统复位信号为1
			r_counter <= "0000";      --计数值归零
			elsif(i_sys_clk'event and i_sys_clk = '1')   then  --如果上升沿来了
			
				if(r_counter = i_mod_value) then			--继续判断,如果记满10,那么重新开始计数
					r_counter <="0000";
				else
					r_counter <= r_counter +1;        --如果没有记满10,也就是计数器的值=9,那么继续计数
				end if;
			end if;
	
	end process;
output <= r_counter;					--将计数值最后进行输出							
end architecture behavior;
		
	


四,进行波形仿真,检验程序是否正确

 可以看到仿真波形以及计数输出是没有错的。

如果想要改变模值,需要改变一下i_mod_value即可。

ps:小白刚开始学习eda实验,有什么错误还希望各位大佬不吝赐教,感谢!

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值