quartus仿真32:74161构成的模7计数器

  • 异步清零法,从0计数到6然后利用过渡态7完成清零操作
  • 同步置零法,计数到6时输出一个置位信号,将准备的数字0000输入到计数器中
  • 清零和置数的控制端输入相当于对计数数字的译码的过程
  • 清零法很遗憾的是有毛刺导致只能计数4个状态,置零法的输出很干净从000到110

在这里插入图片描述

  • 利用OC端进行置数,计数器数到1111时会输出一个高脉冲,加上反相器可以用作置位信号的输入。故要往上数7个状态,同理可以利用QD端输出的高电平从0111到1000,作用与OC端相同,同样往上数7个数。
  • 可以看出波形都挺规整的,输出状态也对应上了
    在这里插入图片描述
Quartus II中使用74161实现28计数器的步骤如下: 1. 打开Quartus II软件,创建一个新工程。 2. 在“File”菜单中选择“New”,创建一个新的VHDL文件。 3. 在VHDL文件中,定义输入输出端口和内部信号: ```vhdl entity counter_28 is Port ( clk : in STD_LOGIC; -- 时钟信号 reset : in STD_LOGIC; -- 复位信号 count_out : out STD_LOGIC_VECTOR (4 downto 0)); -- 输出计数值 end counter_28; architecture Behavioral of counter_28 is signal counter : std_logic_vector(4 downto 0); -- 内部计数器 begin ``` 4. 在内部信号中定义一个5位二进制计数器,使用74161实现: ```vhdl process(clk, reset) begin if reset = '1' then -- 复位计数器 counter <= "00000"; elsif rising_edge(clk) then -- 时钟上升沿触发 if counter = "11111" then -- 判断是否到达最大值,需要复位 counter <= "00000"; else counter <= counter + 1; -- 计数器加1 end if; end if; end process; ``` 5. 将最高位的输出引脚Q4连接到最低位的输入引脚CP,形成一个环形计数器: ```vhdl process(clk, reset) begin if reset = '1' then -- 复位计数器 counter <= "00000"; elsif rising_edge(clk) then -- 时钟上升沿触发 if counter = "11111" then -- 判断是否到达最大值,需要复位 counter <= "00000"; else counter <= counter + 1; -- 计数器加1 end if; end if; end process; process(counter) begin case counter(3 downto 0) is when "0000" => count_out <= "00000"; -- 输出0 when "0001" => count_out <= "00001"; -- 输出1 when "0010" => count_out <= "00010"; -- 输出2 when "0011" => count_out <= "00011"; -- 输出3 when "0100" => count_out <= "00100"; -- 输出4 when "0101" => count_out <= "00101"; -- 输出5 when "0110" => count_out <= "00110"; -- 输出6 when "0111" => count_out <= "00111"; -- 输出7 when "1000" => count_out <= "01000"; -- 输出8 when "1001" => count_out <= "01001"; -- 输出9 when "1010" => count_out <= "01010"; -- 输出10 when "1011" => count_out <= "01011"; -- 输出11 when "1100" => count_out <= "01100"; -- 输出12 when "1101" => count_out <= "01101"; -- 输出13 when "1110" => count_out <= "01110"; -- 输出14 when "1111" => count_out <= "01111"; -- 输出15 end case; count_out(4) <= counter(4); -- 最高位输出 end process; ``` 6. 在仿真中测试代码,确保计数器正常工作。 7. 在Quartus中生成并下载到FPGA板子上,测试计数器是否正常工作。 需要注意的是,以上代码仅实现了简单的28计数器,实际应用中可能需要进一步的优化和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值