Verilog笔记

本文详细介绍了使用Vivado进行Verilog设计的基本流程,包括写代码、综合、实现和生成比特流。重点讲解了模块、always块、Generate块以及task和function的使用。此外,还探讨了Verilog中的时序逻辑、仿真、IP核创建、烧录到BASYS3板子的过程,以及防抖方法和数码管显示的实现。
摘要由CSDN通过智能技术生成

github传送门(练习写的代码,约束文件,仿真文件)


Vivado

基本流程

  1. 写代码。在sources里添加文件,把写好的模块粘贴进去并保存。
  2. [可选] 写仿真文件 (Simulation)(模板代码)。用来在电脑上测试代码的运行结果是否达到预期,如果没问题就可以下到板子上 (写好仿真文件后在最左边Simulation - Run Simulation)(莽的话可以不用仿真直接上板子)。
  3. 综合 (Synthesis)。先检查代码有没有毛病,然后根据代码机器自动生成最优电路图(可以在最左边Synthesis - Open Synthesized Design - Schematics里看到电路图)。
  4. 实现 (Implementation)。把综合的结果与现实中的板子具体联系起来(通过约束文件),相当于从软件走到了硬件。
  5. 生成比特流文件 (Bitstream)。生成的比特流文件就可以上传到板子上了。
  6. 上传到板子上,通过Hardware Manager操作。

关于封装IP核和使用Block Design

千万千万千万不要把IP核导入到源代码所在的工程文件里,测试的时候debug有你哭的。

Verilog

module / 模块

  • module里的内容都是并发执行的。
    不在always和initial块里的代码就是单纯调用这个module的时候才会执行。(如果输入改变了会调用这个module)

always块

  • 多个always块并发执行,也就是说不同的主循环函数并发执行。

  • always里不能实例化模块

  • 一般组合逻辑电路用阻塞赋值(=),时序逻辑电路用非阻塞赋值(<=)。

组合逻辑
  • always @(触发器变量)是组合逻辑电路,always @(posedge clk)是时序逻辑电路。
时序
  • posedge(positive edge) 是上升沿关键字,上升沿指的是变量从0变成1的那个瞬间。对应下降沿(negedge - negative edge)就是变量从1变成0的那一瞬间。因此@(posedge var)指的是对var的上升沿敏感,意思就是var达到上升沿的时候就会触发。

  • always @(<敏感信号表达式>)
    可以理解成onValueChangeListener,当敏感信号表达式的值发生变化时,就会执行always块。

  • 因此always @(posedge clk)代表在每次时钟clk到达上升沿的时候会执行一次(因为并发执行,所以时序逻辑电路用非阻塞赋值就可以实现与时钟上升沿同步修改变量),因此这个always块里的代码可以理解成主循环。

  • 不论上升沿clk还是下降沿rst,在触发时读取到clk和rst的值都是这两个信号接下来要变成的值。(即clk读取到的值为1,rst读取到的值为0)

Generate块(书上p83)

  • 用来在模块中循环实例化其他模块。关键字为generate,对应声明循环控制变量的关键字为genvar
    示例:
genvar i;
generate
	for(i=0; i<n; i=i+1) 
	begin: tag_name
		module_name_1 instance_name_1 (input_1,output_1);
		//可以继续实例化别的模块,如:
		//module_name_2 instance_name_2 (input_2,output_2);</
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值