verilog(知识点总结篇)

一、状态机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、RTL模拟电路
在这里插入图片描述
得到RTL图如下:
在这里插入图片描述
assign是组合逻辑的语句;
always是时序逻辑的语句;
reg语句用于使用寄存器;
wire一般用于线网的连线用法

三、modelsim仿真全过程:
1)编写.v文件
在这里插入图片描述
2)配置EDA tool settings,点击 start 的 test bench 生成.vt文件
在这里插入图片描述
在这里插入图片描述
3)修改要测试的testbench的测试内容(搭建测试平台)
在这里插入图片描述

4)配置simulation的.vt文件
在这里插入图片描述
是这个模块名
在这里插入图片描述
5)进行仿真
在这里插入图片描述

四、任务和函数
在这里插入图片描述
根据Verilog DHL语言标准来看,task必须在always里面调用,task本身可以调用task,但不能调用module。module的调用是和always、assign语句并列的,所以在这些语句中均不能直接调用module,只能采用和module端口交互数据的方法达到调用的功能。
task语句是可综合的,但其中不能包含always语句,因此也只能实现组合逻辑。***顺序调用task对于电路设计来说,就是复制电路功能单元。***多次调用task语句就是多次复制电路,因此资源会成倍增加,不能达到电路复用的目的;同时用task封装的纯逻辑代码会使得电路的处理时间变长,最高频率降低,不能应用与高速场合。
综上所述,可以看出task语句的功能就是将代码中重复的组合逻辑封装起来简化程序结构,具备组合逻辑的所有有点和缺点,而对于时序设计,task语句无法处理,只能通过Verilog HDL语言中的层次化设计方法,将其封装成module,通过端口交换数据来达到简化程序结构的目的。
而function是可综合的,但由于function语句中不支持使用always语句,因此无法捕获先好跳变沿,所以不能实现时序逻辑。和task一样,function拥有组合逻辑电路的所有优点和缺点。(本段摘选CSDN博主「在路上的少年」https://blog.csdn.net/duhanting/java/article/details/10326405的总结)

即Function就是函数设计,和task一样具有封装组合逻辑代码作用,这两个在Testbench用的多一些,在module里面,请不要使用。

补充一个消抖的延时代码:
在这里插入图片描述
若发现reg的键值和按下不一致,即发生了抖动,此时延时20毫秒消抖;如果发现键值和按下的保持一致,则不用管它。

以下程序段实现拍了两拍的延迟输出,并输出一个上升沿。
blog.csdnimg.cn/20200903181439544.png#pic_center)
可以看到将外界输入的电平转化成一个脉冲信号:
在这里插入图片描述

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值