项目实例:模十状态机与7段译码器显示系统,Quartus环境(文末附程序,百度文库里的)

写得有点混乱,但大致是对的

  • 新建一个文件夹,名字任意 (不要有中文,以英文开头)
    在这里插入图片描述
  • 在文件夹里放v/vhd文件
    在这里插入图片描述
    在这里插入图片描述

⚠点确定

  • 程序复制进去,保存关闭
    在这里插入图片描述
  • Quartus,启动
    在这里插入图片描述
    在这里插入图片描述
  • 找你刚才创建的文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

怕同学们看不清,我把型号写一下(我也是看百度文库里的,Cyclone-EP1C6Q240C8,感觉这个无所谓┑( ̄Д  ̄)┍

在这里插入图片描述
在这里插入图片描述

  • 第一步大功告成
    在这里插入图片描述
  • 双击这里,弹出文件
    在这里插入图片描述
    在这里插入图片描述

我是怎么反应过来我文件类型错了,就是看见这里里面库的类型和变量都没有高亮。。。

  • 开始编译,warnnings可以不用管,出错就看是哪一行继续调试
    在这里插入图片描述

第一次调试会有点慢在这里插入图片描述
在这里插入图片描述

  • 跑波形仿真
    在这里插入图片描述
    在这里插入图片描述
  • 保存同名文件
    在这里插入图片描述
  • 在这块区域点鼠标右键
    在这里插入图片描述
  • 选择节点
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

如果你是第一次做,Filter这里选Pins,一定得注意

  • 你可以挑选节点,也可以像我一样懒,直接全选
    在这里插入图片描述
  • 一路OK过去
    在这里插入图片描述
  • 谨记时序仿真
    在这里插入图片描述
    在这里插入图片描述
  • 记得生成表格!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 还可以改properties,H-16进制
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

啥值也不改

  • 更改大小,鼠标右键缩小
    在这里插入图片描述
  • 根据定义,clk为系统时钟,load为置位信号(高有效),rst为复位(清零)信号(低有效),sel为频率选择信号,countss为置位信号,seg为七段译码器输出,counts为状态信号输出。
  • 以下为测试,load拉高一段
    在这里插入图片描述
  • 清零信号全部拉高后拉低一段
    在这里插入图片描述
  • 更改选择信号
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 重新生成表单,开始仿真
    在这里插入图片描述

部分步骤可以继续优化

代码来自百度文库

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity mod10 is
port(
    clk:in std_logic;
    rst:in std_logic;
    load:in std_logic;
    sel:in std_logic_vector(1 DOWNTO 0);
    countss:in std_logic_vector(3 DOWNTO 0);
    seg:out std_logic_vector(6 DOWNTO 0)
);
end mod10;

architecture beha of mod10 is
    signal clk1:std_logic;
    signal clk2:std_logic;
    signal clk4:std_logic;
    signal clk8:std_logic;
    signal clk16:std_logic;
    signal count:std_logic_vector(3 DOWNTO 0);
    signal q_temp:std_logic_vector(3 DOWNTO 0);
    signal counts:std_logic_vector(3 DOWNTO 0);
begin

process(clk,rst)
begin 
    if(rst = '0') 
    then count <= "0000";
    elsif(clk'event and clk = '0') then
    count <= count + 1;
    end if;
    clk2 <= count(0);
    clk4 <= count(1);
    clk8 <= count(2);
    clk16 <= count(3);
end process;

process(sel)
begin
    case sel is
        when "00" => clk1 <= clk2;
        when "01" => clk1 <= clk4;
        when "10" => clk1 <= clk8;
        when "11" => clk1 <= clk16;
        when others => null;
    end case;
end process;

process(clk1,rst,load)
begin
    if(rst = '0') then counts <= "0000";
    elsif(load = '1') then counts <= countss;
    elsif(clk1'event and clk1 = '0') then
    case counts is
        when "0000" => counts <= "0010";
        when "0010" => counts <= "0101";
        when "0101" => counts <= "0110";
        when "0110" => counts <= "0001";
        when "0001" => counts <= "1001";
        when "1001" => counts <= "0100";
        when "0100" => counts <= "1000";
        when "1000" => counts <= "0111";
        when "0111" => counts <= "0011";
        when "0011" => counts <= "0000";
        when others => counts <= "0000";
    end case;
    end if;
    q_temp <= counts;
end process;

process(q_temp)
    begin
        case q_temp is
        when "0000" => seg <= "1000000";
        when "0001" => seg <= "1111001";
        when "0010" => seg <= "0100100";
        when "0011" => seg <= "0110000";
        when "0100" => seg <= "0011001";
        when "0101" => seg <= "0010010";
        when "0111" => seg <= "0000010";
        when "1000" => seg <= "0000000";
        when "1001" => seg <= "0001000";
        when others => seg <= "0001000";
        end case;
end process;


end beha;

几个小坑,这百度文库里的程序不能用v文件而得建立vhd文件,别说我菜,这才第二节实验课。。。有Bug都是我当场一点点调试出来的。。。
在这里插入图片描述
这也必须全都写好定义,我偷懒一下没写,就GG了,变量名还是这样规范全部列出比较好,你列了一行最后会忘了自己定义了啥子玩意

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7段译码器是一种常见的数字电路,用于将二进制代码转换为七段显示的控制信号。在计算组成原理实验中,我们需要设计和实现一个这样的译码器。 首先,我们需要确定输入的位数。一般来说,7段译码器的输入为四位二进制代码,即D3、D2、D1和D0。 接下来,我们需要根据真值表来设计译码器的逻辑电路。针对四个输入位的所有可能输入(从0000到1111),我们需要确定每个输入组合对应的输出信号。对于7段译码器来说,输出信号是通过组合逻辑得到的,每个输出对应一个七段数码管上的段。 例如,对于输入代码为0000,我们需要将七段数码管的A、B、C、D、E、F和G段都关闭。因此,我们可以设置输出信号O0 = 1、O1 = 1、O2 = 1、O3 = 1、O4 = 1、O5 = 1和O6 = 0。 根据真值表和逻辑电路图,我们可以使用逻辑门(如AND、OR和NOT门)以及多路复用器来实现译码器。在实验中,我们可以使用集成电路来代替逻辑门和多路复用器的功能。常见的集成电路有74LS48和74LS138。 最后,在实验中我们需要连接电源和七段数码管,并将译码器的输出信号与相应的数码管段进行连接。这样,当输入二进制代码变化时,七段数码管上对应的段也会相应变化。 总之,设计和实现7段译码器需要确定输入位数、根据真值表设计逻辑电路、使用逻辑门或集成电路实现电路功能,并将输出信号连接到七段数码管上。这一实验可以帮助我们更好地理解数字逻辑和电路设计的基本原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值