当前位置:   article > 正文

FPGA-1、verilog书写基本格式_verilog激励模块怎么写

verilog激励模块怎么写

1、Verilog书写基本格式


功能:与输入

在这里插入图片描述


功能模块代码如下(示例):

module key_ctrl_led (                //模块module名和文件名保持一致,module与endmodule一致
input        wire                key1,        //输入input一定都是线型wire的,默认位宽为1,此处不用标明位宽
input        wire                key2,        //第二个输入信号,加逗号连接
output        wire                led         //输出output,三个信号,最后一个信号不加逗号。output类型可以是wire也可以是reg型
);
//1&1=1 1&0=0 0&1=0 0&0=0        //与的真值表
assign led = key1&key2;                //assign是对线型语句的输出变量赋值

endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

重点知识:
1、输入Input一定都是线型wire的,输出output可以wire也可以reg
2、输入输出是针对模块写的
3、信号名称是唯一的(如key1、key2、led)

assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。

Testbench 测试激励 :给功能模块的key1、key2信号源,然后查看led信号是否正确

不可综合:不可以真正下载到FPGA


仿真激励模块代码如下(示例):

`timescale        1ns/1ns //`timescale 表示的是时标,后面的表示单位/精度
//#10,比如要用到延时功能,#10代表延时10ns。不能10.1,除非精度改成100ps=0.1ns。
module tb_key_ctrl_led();//此测试模块不需要定义端口
reg key1;//内部变量只需要定义变量类型和名称,不需要定义方向
reg key2;//变量类型定义只与变量的赋值方式有关
wire led;

//always 是一种赋值方式, #10 表示延时 10 个时间单位
//每过10ns,key阻塞赋值
always #10         key1 = {$random};
//$random 是一个随机函数,可以用来取一个随机数, {}是取绝对值
always #15        key2 = {$random};

//例化被测试模块,两个模块之间的信号传递的唯一方式
key_ctrl_led key_ctrl_led_inst(
	.key1(key1),
	.key2(key2),
	.led(led)

);
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

重点知识:
timescale 1ns/1ns //timescale 表示的是时标,后面的表示单位/精度
//#10,比如要用到延时功能,#10代表延时10ns。不能10.1,除非精度改成100ps=0.1ns。

1、reg在always语句下编程
2、例化模块内部的输出,括号内是wire变量。
例化模块内部的输入,括号内既可以是wire也可以reg。
3、.key1(key1),“.”后面的key1是功能模块中的,括号里的key1是仿真激励模块中的
4、$random函数调用时,返回一个32位的随机数,它是一个带符号的整形数


结果

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/516609
推荐阅读
相关标签
  

闽ICP备14008679号