ROCCHI THE ROCK!|

Yamada_Ryo

园龄:1年4个月粉丝:3关注:5

FPGA入门笔记001

1、assign

赋值语法以关键字assign开头,后面是信号名,可以是单个信号,也可以是不同信号网的连接。

assign为连续赋值语句,通常用于组合逻辑电路,例如:

assign led_out = (key_in == 0)? a : b;

语法结构如下:

assign <net_expression> = [drive_strength] [delay] <expression of different signals or constant value>

使用 assign 语句时, 需要遵循一些规则:

1、左值 应该始终是wire类型的标量或向量网络, 或者标量或矢量网络的串联, 而绝对不能是reg类型的标量或矢量寄存器。

2、右值 可以包含标量或向量寄存器以及函数调用。

3、只要 右值 上的任何操作数的值发生变化, 左值 就会使用新值进行更新。

4、assign 语句也称为连续赋值, 并且始终处于活动状态。

2、timescale

例如:

`timescale 1ns/1ps

定义了一个仿真精度。

'1ns'为仿真步进,例如设置100的延时'#100',则实际延时100*1ns。

'1ps'为仿真精度,设定延时,可以精确到小数点后两位,例如'#100.001'。

'`'为键盘左上角的按键

3、激励信号与检测信号

在testbench中,激励信号定义为reg型,检测信号定义为wire型。

4、initial块

initial块可以理解为一个初始化块。

在initial的起始位置的语句在0时刻即开始执行,之后如果遇到延时,则延时之后执行接下来的语句。

如果initial中有多条语句,则置于begin…end之间。

例如:

initial begin
signal_a = 0;signal_b = 0;signal_c = 0;
#100; //延时100*1ns
signal_a = 0;signal_b = 0;signal_c = 1;
#100;
signal_a = 0;signal_b = 1;signal_c = 0;
#100;
signal_a = 0;signal_b = 1;signal_c = 1;
#100;
signal_a = 1;signal_b = 0;signal_c = 0;
#100;
signal_a = 1;signal_b = 0;signal_c = 1;
#100;
signal_a = 1;signal_b = 1;signal_c = 0;
#100;
signal_a = 1;signal_b = 1;signal_c = 1;
#200;
$stop; //使用系统函数stop将系统停止下来
end

5、在testbench中例化待测模块

例如:

led_test led_test0( //设置例化名称为led_test0
.a(signal_a),
.b(signal_b),
.key_in(signal_c),
.led_out(led)
);

将待测试模块的信号端口与testbench中的端口进行连接

'.'之后紧跟的是待测试模块端口

'()'内的是testbench中的端口

待测试模块定义好后,可以多次在testbench中实例化,例如:

led_test led_test1( //设置例化名称为led_test1
.a(),
.b(),
.key_in(),
.led_out()
);

本文作者:Yamada_Ryo

本文链接:https://www.cnblogs.com/little55/p/17834498.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Yamada_Ryo  阅读(78)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起