实现十进制计数器EDA|FPGA

这篇具有很好参考价值的文章主要介绍了实现十进制计数器EDA|FPGA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 实验内容

有限状态机设计:实现十进制计数器

  • 实验目的

有限状态机设计:实现十进制计数器

  • 软件流程(硬件连接)

①新建工程

②创建半加器原理图

③将设计项目设置成可调用的元件

④尝试运行代码

⑤新建文件输出代码的波形

 四、代码 

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;      --调用库、程序包
entity shijinzhi is                 --实体名
    port
    (   
        inCLK,RST_in: IN STD_LOGIC;
        data_hex7:out std_logic_vector(7 downto 0);           --数码管段码输出
        com:out std_logic_vector(3 downto 0)                --位码输出      
    );
end shijinzhi;

architecture Lin of shijinzhi is         --结构体

    component led_change is       --元件说明
    port
    (
        data_in : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
        LED7S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        com : out std_logic_vector(3 downto 0) -- 选通引脚
    );
    end component led_change;

    component CNT10 is           --元件说明
    PORT 
    (
        CLK,RST:IN STD_LOGIC;  
        DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
    );
    end component CNT10;

                                                   --design the signal of the data
    signal dd :STD_LOGIC_VECTOR(3 DOWNTO 0);
    signal num:STD_LOGIC_VECTOR(3 DOWNTO 0); 
    signal jinwei:STD_LOGIC;
    signal data_num:std_logic_vector(3 downto 0);

                                                              --Converted data
    signal data_sm:std_logic_vector(7 downto 0);

begin

part1:                                               --CNT10 process
    CNT10 port map
    (
        CLK =>inCLK,RST =>RST_in, -- 
        DOUT => num
    );

    data_num <= num;

part2:                                               --the led-change process
    led_change port map
    (
        data_in => data_num,
        LED7S =>data_sm,
        com =>com
    );
    data_hex7<=data_sm;
END Lin;    
LIBRARY IEEE;
 USE IEEE.STD_LOGIC_1164.ALL;
 USE IEEE.STD_LOGIC_UNSIGNED.ALL;            --调用库、程序包
 ENTITY led_change IS                          --实体说明
    PORT (
        data_in : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
        LED7S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        com : out std_logic_vector(3 downto 0) -- 选通引脚
        );
    END ; 
ARCHITECTURE one OF led_change IS           --结构体
        TYPE states IS(SR0,SR1,SR2,SR3,SR4,SR5,SR6,SR7,SR8,SR9);
        SIGNAL LIN :states;
BEGIN 
    com <= "1101"; --choose the shumaguan            --引脚设置
    --com[3] PIN_141
    --com[2] PIN_142
    --com[1] PIN_144
    --com[0] PIN_6

    PROCESS (data_in) BEGIN            --过程结构体
        CASE data_in IS
        WHEN "0000" => LED7S <= X"03";
        WHEN "0001" => LED7S <= X"9F";
        WHEN "0010" => LED7S <= X"25";
        WHEN "0011" => LED7S <= X"0d";
        WHEN "0100" => LED7S <= X"99";
        WHEN "0101" => LED7S <= X"49";
        WHEN "0110" => LED7S <= X"41";
        WHEN "0111" => LED7S <= X"1F";
        WHEN "1000" => LED7S <= X"01";
        WHEN "1001" => LED7S <= X"09";
        when others=>LED7S<=X"FF";            --支持0-9字符
        END CASE ;
    END PROCESS;
END one;                             --通用偶数分频器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;               --调用库、程序包
entity  gen_div is
    generic(div_param:integer:=1);        --分频因子,分频为2*div_param,默认2分频
    port
    (
        clk_in:in std_logic;              --输入时钟
        bclk:out std_logic;              --分频输出
        resetb:in std_logic               --复位信号
    );
end gen_div;                             
architecture behave of gen_div is           --结构体
signal tmp:std_logic;                       --输出暂存寄存器
signal cnt:integer range 0 to div_param:=0;          --计数寄存器
begin
------------------------------
    process(clk_in,resetb)          --过程结构体
    begin
        if resetb='1' then             --reset有效时,bclk始终是0
            cnt<=0;
            tmp<='0';
        elsif rising_edge(clk_in) then
            cnt<=cnt+1;
            if cnt=div_param-1 then
                tmp<=not tmp;             --取反信号
                cnt<=0;
            end if;
        end if;
    end process;
    bclk<=tmp;                             --输出
--------------------------------
end behave;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;              --调用库、程序包

--v1.0 使用拨码开关产生时钟信号,不稳定。
--v1.1 增加分频器,以此产生时钟信号
ENTITY CNT10 IS
    PORT (CLK,RST:IN STD_LOGIC;  --
        DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
    END CNT10;                               --实体名
ARCHITECTURE behav OF CNT10 IS
------------------------------
        TYPE states IS(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);
        SIGNAL ST,NST :states :=s0;
signal clk_tmp:std_logic;                           --半秒脉冲
    component gen_div is                        --分频元件调用声明
    generic(div_param:integer:=40000000);        --20000000分频的,产生半秒脉冲 
    port
    (
        clk_in:in std_logic;
        bclk:out std_logic;
        resetb:in std_logic
    );
    end component gen_div;

    BEGIN 

gen_1s:                             --分频产生0.5s脉冲
        gen_div port map            --分频元件例化
        (
            clk_in=>CLK,
            resetb=>not RST,
            bclk=>clk_tmp
        );
REG:    PROCESS (clk_tmp,RST)
    BEGIN 
        IF RST='0' THEN ST <=s0; 
        ELSIF clk_tmp'EVENT AND clk_tmp ='1' THEN
        ST <= NST;
        END IF;
    END PROCESS REG;
COM:    PROCESS(ST)                                    
        VARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0);
            BEGIN
            CASE ST IS
            WHEN s0 => Q :="0000"; DOUT <=Q; NST <=s1;
            WHEN s1 => Q :="0001"; DOUT <=Q; NST <=s2;
           WHEN s2 => Q :="0010"; DOUT <=Q; NST <=s3;
            WHEN s3 => Q :="0011"; DOUT <=Q; NST <=s4;
            WHEN s4 => Q :="0100"; DOUT <=Q; NST <=s5;
            WHEN s5 => Q :="0101"; DOUT <=Q; NST <=s6;
            WHEN s6 => Q :="0110"; DOUT <=Q; NST <=s7;
            WHEN s7 => Q :="0111"; DOUT <=Q; NST <=s8;
            WHEN s8 => Q :="1000"; DOUT <=Q; NST <=s9;
            WHEN s9 => Q :="1001"; DOUT <=Q; NST <=s0;
            END CASE;
        END PROCESS COM;
END behav;  
--PROCESS(clk_tmp,RST)
--      VARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0);
--BEGIN
--      IF RST='0' THEN Q:=(OTHERS=>'0'); 
--      ELSIF clk_tmp'EVENT AND clk_tmp ='1' THEN   
--                  IF Q<9 THEN Q:=Q+1;
--                  ELSE Q := (OTHERS =>'0');
--                  END IF;
--              END IF;
--          DOUT <=Q;
--      END PROCESS;
--
--  END behav;

五、实验结果及分析eda计数器程序设计,汇编,开发语言

 文章来源地址https://www.toymoban.com/news/detail-770609.html

到了这里,关于实现十进制计数器EDA|FPGA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1位十进制可逆计数、译码、显示电路设计

    计数器同样由三个模块构成,分别为:顶层,计数器和译码器。 一、实验任务 大家这会儿数电理论课应该还没学到这里,所以对以上的部分名词进行解释: 1.异步清零(clr) 指不管现在时钟信号(clk)是什么,跑到哪儿了,只要你按下异步清零的按钮,计数器就应该马上归

    2024年02月05日
    浏览(55)
  • C语言实例:输出八进制,十进制,十六进制,指定位数整数,带符号整数,科学计数法表示的整数

    直接使用printf函数输出整数即可,例如: 输出结果为: %d是printf函数的格式控制符,用于输出整数。在printf函数中,%d会被替换成一个整数变量的值。例如,printf(“%d”, num)中%d将被num的值替换,从而输出num的值作为整数。 使用printf函数的格式控制符可以输出指定位数的整数

    2024年02月08日
    浏览(55)
  • 任意进制计数器12进制计数数码管显示verilog代码

    名称:任意进制计数器12进制计数数码管显示verilog代码 软件:VIVADO 语言:Verilog 代码功能: 设计一个12进制计数器,计数值00-11需要在数码管上显示, 时钟脉冲通过按键开关设计。 电路的输入信号en进行清零。 本代码可以修改为任意进制计数器,即修改计数控制模块的红框

    2024年02月04日
    浏览(51)
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:计数器与分频器   ​​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2024年02月02日
    浏览(62)
  • 数字电路13-任意进制计数器设计

    因为市面上的进制计数器的种类优先,所以需要特定进制时,只能自己在已有产品的基础上构成需要的特定进制。 十进制计数器也是通过4位二进制计数器,去掉多余状态所得 根据十进制计数器,可得M进制计数器的特点,即状态数、脉冲数、末状态 如前面的十进制计数器,

    2024年02月07日
    浏览(59)
  • 任意进制加法计数器电路设计

    目录 一、题目 二、时钟发生电路 1、施密特触发电路 2、单稳态电路 3、多谐振荡电路 三、 N进制计数器 1、M的情形 2、MN的情形 2、1  193实现 2、2 192实现 四、设计的小bug 1、两个bug 2、bug的原因及解决 五、仿真源文件的获取 图一 题目要求         如题,我们要设计三部

    2024年02月09日
    浏览(50)
  • 用verilog写一个60进制计数器

    你好!下面是一个使用 Verilog 写的 60 进制计数器的示例代码。这个计数器有四个输入: clock :时钟信号。 reset :当设为高电平时,计数器会重置为 0。 enable :当设为高电平时,计数器才会执行计数操作。 count_up :当设为高电平时,计数器会执行加 1 操作;当设为低电平时

    2024年02月11日
    浏览(49)
  • 用74LS73设计四位二进制加法计数器和8421BCD加法计数器

     (1)用2片74LS73实现该电路,由CP端输入单脉冲,设计并画出4位异步二进制加法计数器电路图。  (2)由CP端输入单脉冲,测试并记录Q1~Q4端状态及波形。 四位二进制加法计数器状态迁移表如下: Q 4n Q 3n Q 2n Q 1n Q 4n+1 Q 3n+1 Q 2n+1 Q 1n+1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 0 1 0

    2024年02月10日
    浏览(90)
  • 使用74LS161设计任意进制计数器

    可预置的四位二进制同步计数器74LS161具有并行预置数据、清零、置数、计数和保持功能,并且有进位输出端,可以串接计数器使用。引脚排列如图7-1所示,功能表见7-2所示。 图7-1 74LS161引脚排列 从下表7-2中可知,该计数器具有信号清零端 ,信号使能端CEP、CET,信号置数端

    2024年02月02日
    浏览(65)
  • Verilog数字系统设计——10进制计数器,具有异步复位功能

    编程实现10进制计数器,具有异步复位功能,十位和个位用8421BCD码表示,各端口定义如下图所示: 仔细考虑端口定义中每个端口的含义; 要求完成程序编辑、编译、时序仿真; 实验提交Verilog设计文件(.v文件)、仿真波形截图以及对于第3个步骤所提出问题的回答,文件打包

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包