FPGA入门学习笔记001

发布时间 2023-11-15 18:37:36作者: Yamada_Ryo

1、assign

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

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

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()
);