1.设计文件和testbench的区别
Verilog模块语法_verilog module_路途…的博客-CSDN博客
verilog中tb仿真文件模板_verilog tb文件_内有小猪卖的博客-CSDN博客
testbench用来验证硬件电路
需要包括:
a.时间声明: `timescale 10ns/1ps %单位时间/时间精度
b.Module +测试模块名 :不用声明输入输出变量
e.g.
设计: module test (a,b,c);
testbench:module test;
c.内部信号初始号:包括端口类型定义(reg/wire)和初始化(e.g. clk)
d.产生激励:时钟激励波形以及程序
e.实例化模块:
模块名字 u_模块名称 e.g. time_count u_time_count // 时钟模块名称 实例化名称
(
.模块端口a(连线a)
……
)
对于实例化的理解,主模块和子模块之间的参数互联(封装后外部端口和参数之间的连接?
最强Verilog例化说明_奇点FPGA的博客-CSDN博客
f.结束块
initial
begin
$dumpfile("bbb.vcd"); //生成波形vcd
$dumpvars; //
#1000; //防止程序无限运行,设定运行时间
$finish;
end
2.模块
分模块设计。
3.reg/wire
在硬件电路中,wire看作是连接导线,只要有输入,马上反映到输出上;
reg是寄存器,当有输入时,还需要有触发信号,才会有输出。
如果没定义时,默认该信号为wire型;
https://www.cnblogs.com/surpassal/archive/2012/10/31/2747789.html
4.运算符
单个运算符都是 位运算;^:异或
两个运算符都是逻辑运算,不看单独某一位,看的是整体
5.电路知识
时序逻辑电路/组合逻辑电路区别:是否有时钟参与
触发器:
能够保存电路状态:e.g. x=x+y 如果不能保存上一个状态,将无法实现
锁存器:同样能够存储电路状态
与触发器不同的是,锁存器latch采用电平触发,触发器flip flop采用上下边沿触发;
电平触发会导致毛刺现象,为避免产生,通常在if和case语句中做到完全描述,即else/default
6.同步/异步
看always触发中的敏感事件列表,如果是靠clk触发always块,称为同步;
always@(posedge CLK)
若不止靠clk来触发,则称为异步;
always@(posedge CLK , negedge Rst_n)