Verilog HDL 实现 74HC595

文章目录

  • Verilog HDL 实现 74HC595
    • 一、简介
    • 二、代码实现
      • 1、按键消抖模块
      • 2、实现功能的模块
    • 三、效果的演示

我们使用Verilog 语言来实现74HC595这个芯片的功能并且进行展示。

一、简介

74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

二、代码实现

这里我们使用代码来实现这个芯片的功能并呈现结果:

1、按键消抖模块

我们知道用按键,必消抖。

module debounce (clk,rst,key,key_pulse);parameter N = 1;                      //要消除的按键的数量input clk;input rst;input [N-1:0]   key;             //输入的按键                    output [N-1:0]   key_pulse;      //按键动作产生的脉冲    reg [N-1:0]   key_rst_pre;       //定义一个寄存器型变量存储上一个触发时的按键值reg [N-1:0]   key_rst;          //定义一个寄存器变量储存储当前时刻触发的按键值wire [N-1:0]   key_edge;       //检测到按键由高到低变化是产生一个高脉冲//利用非阻塞赋值特点,将两个时钟触发时按键状态存储在两个寄存器变量中always @(posedge clk  or  negedge rst)beginif (!rst) beginkey_rst <= {N{1'b1}};      //初始化时给key_rst赋值全为1{}中表示N个1key_rst_pre <= {N{1'b1}};endelse beginkey_rst <= key;                     //第一个时钟上升沿触发之后key的值赋给key_rst,同时key_rst的值赋给key_rst_prekey_rst_pre <= key_rst;             //非阻塞赋值。相当于经过两个时钟触发,key_rst存储的是当前时刻key的值,key_rst_pre存储的是前一个时钟的key的值end    endassign  key_edge = key_rst_pre & (~key_rst);//脉冲边沿检测。当key检测到下降沿时,key_edge产生一个时钟周期的高电平reg [17:0]   cnt;                       //产生延时所用的计数器,系统时钟12MHz,要延时20ms左右时间,至少需要18位计数器     //产生20ms延时,当检测到key_edge有效是计数器清零开始计数always @(posedge clk or negedge rst)beginif(!rst)cnt <= 18'h0;else if(key_edge)cnt <= 18'h0;elsecnt <= cnt + 1'h1;end  reg     [N-1:0]   key_sec_pre;                //延时后检测电平寄存器变量reg     [N-1:0]   key_sec;                    //延时后检测key,如果按键状态变低产生一个时钟的高脉冲。如果按键状态是高的话说明按键无效always @(posedge clk  or  negedge rst)beginif (!rst) key_sec <= {N{1'b1}};                else if (cnt==18'h3ffff)key_sec <= key;  endalways @(posedge clk  or  negedge rst)beginif (!rst)key_sec_pre <= {N{1'b1}};else                   key_sec_pre <= key_sec;             end      assign  key_pulse = key_sec_pre & (~key_sec);     endmodule

2、实现功能的模块

module hc (clk,out,in,key,rst);
input clk,in,rst,key;
output reg [7:0]out;
wire              key_pulse;debounce  u1 (                               .clk (clk),.rst (rst),.key (key),.key_pulse (key_pulse));always @(posedge clk)beginif(!rst)out<=8'b11111111;else if(key_pulse)beginout[0]<=!in;out[7:1]<=out[6:0];endend                                 endmodule

之后,我们进行编译:

(这是编译成功的画面。)

然后,我们设置引脚的分配:

(也就是设置小脚丫的引脚的分配。)


最后还需要进行烧录也就是上传:

(这是上传(烧录)成功的画面。)

三、效果的演示

参见下面的视频,要是喜欢的话可以去点个赞嘛:
https://www.bilibili.com/video/BV1iS4y1R7aJ?spm_id_from=333.999.0.0

Verilog HDL 实现 74HC595

以上就是Verilog HDL 实现 74HC595,如果有帮助的话就点个赞嘛,(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤,(づ ̄3 ̄)づ╭❤~。

谢谢大家的阅读与支持啦。

Verilog HDL 实现 74HC595相关推荐

  1. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  2. (多图) 基于Verilog HDL的FIR数字滤波器设计与仿真

    引言:数字滤波器是语音与图像处理.模式识别.雷达信号处理.频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移.温度漂移和噪声等问题.有限冲 ...

  3. 移位寄存器专题(verilog HDL设计)

    目录 移位寄存器简介 分类 4位右移位寄存器工作原理 1. 16位右移位寄存器 2. 16位左移寄存器 3. 串行输入并行输出寄存器 4. 并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数 ...

  4. 【Verilog HDL 训练】第 11 天(分频电路)

    设计一个占空比50%的三分频电路. 针对这个分频器,博文的末尾会给出一个反面教材,这是我上次写的一个分频器,看起来很好,其实是不能综合的.针对其中的错误,我令立博文记录之:[ Verilog ]alw ...

  5. 【Verilog HDL 训练】第 06 天(边沿检测)

    1. 复习verilog语法 [选做题] - reg和wire的区别 寄存器数据类型 Verilog中规定,凡是在程序块中被赋值的变量,都必须是寄存器类型的.(程序块:例如always块) 这里未免还 ...

  6. SPI的原理以及Verilog HDL实现

    文章链接:SPI https://www.diangon.com/wenku/rd/danpianji/201501/00017903.html SPI是同步串行通信接口.  SPI是英语Serial ...

  7. 【 FPGA 】MATLAB 生成 FIR 滤波器的操作步骤(包括生成Verilog HDL代码以及仿真过程)

    使用MATLAB生成滤波器有很多学问,这里只是作为初步的探索,和FPGA的更多结合,也正在探索中,相关博文例如:[ FPGA ]FIR滤波器目录,该专题目录正在记录我学习FIR滤波器的过程. MATL ...

  8. 【 Verilog HDL 】赋值冲突问题

    最近在看<FPGA之道>,对此爱不释手,真是开卷有益!很想收藏一本,可惜买不到了. 进入正题,今天记录这篇笔记,应该是学习使用Verilog HDL描述硬件电路时都会遇到的问题,记录下来, ...

  9. 【 Verilog HDL 】正确的变量访问思路

    以前对这个话题也写了至少两次了,很多人在编写HDL程序时候,也时常遇到这个问题,那就是多驱动问题,今天终于看到了规范的说法了. Modelsim下进行功能仿真没问题,可是在ISE综合报错,如何解决? ...

  10. 【 Verilog HDL 】避免出现锁存器的组合电路描述方式

    无论多么复杂的FPGA设计,如果我们将其中具有存储功能的机构(寄存器.RAM.FIFO等)全部拿掉,那么剩下的若干独立数字电路网络则都是纯组合逻辑电路,对应的,我们称FPGA设计中这些具有存储功能的结 ...

最新文章

  1. elasticsearch多表关联查询_Mybatis【15】 Mybatis如何实现一对一的情况多表关联查询?...
  2. 常用口语绝佳句型100句(2)
  3. Windows下curl的下载与使用
  4. jQuery应用之(二)使用jQuery管理选择结果(荐)
  5. 疯狂ios讲义之疯狂连连看游戏简介
  6. 【AI与多媒体处理】
  7. 对jQuery的认识
  8. 截取地址栏URL参数
  9. centos tar安装mysql_centos系统通过tar.gz包安装mysql5.7.19
  10. MQTT(3)---MQTT协议及其在物联网中的应用
  11. cricheditview实现语法高亮和行号_Markdown语法详解及工具介绍
  12. Dll学习心得(2)
  13. VMware虚拟机部署k8s集群
  14. 人工智能培训的过去与现在
  15. 自学编程的 6 个致命误区
  16. 平面、柱面、球面投影
  17. 计算机网络各层网络设备(中继器、集线器、网桥、交换机、路由器、网关)总结
  18. element ui响应式布局笔记,适配笔记
  19. apple tv 开发_如何在Apple TV上重新排列,添加和删除频道
  20. SpringBoot整合Tomcat中的组件

热门文章

  1. unit10-Cookie、Session
  2. php编程基础与实例教程第二版课后,PHP编程基础与实例教程(第2版)
  3. 【直观详解】什么是正则化
  4. springboot整合微信网页授权登陆
  5. MaNGOS大芒果服务端源码研究(一)——环境安装与源码下载
  6. 2022年小游戏----游戏背包系统之搭建背包UI
  7. 指环王中那个白色头发、擅长用弓箭的精灵族男子
  8. 出口托收结算方式DA、DP、CAD详解
  9. 计算机无法识别建行网银盾,电脑无法识别建行网银盾怎么办
  10. 重装系统后小喇叭显示未安装音频输出设备