FPGA学习杂记1

wire型、reg型变量:

        Verilog中何时要定义成wire型,何时定义成reg型?

        大体来说,变量要放在begin...end之内,则该变量只能是reg型;在begin...end之外,则用wire型。以下是具体情况:

                1:assign语句

                        例:assign   out = a;

                        out必须是线性,若为寄存器型则报错。

                2:元件实例化时必须用wire型

        寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动

`timescale  1ns/1ns

        写在所有仿真文件(.v)的代码首行,时间尺度、精度单位定义,时间尺度预编译指令,用来定义模块仿真时的时间单位和时间精度,不可被综合,但在可综合代码中也可以写,只是会在仿真时表达效果,而综合时会自动被综合器优化掉

parameter、localparam、#(parameter)

        parameter用在模块内部时和localparam作用类似,即定义一个参数常量

parameter       CNT1 = 8'd999;
localparame     CNT2 = 8'd999;

        #(parameter)定义在模块开始处,如下:

module  test
#(
    parameter   CNT = 8'd999 
 )

(
    input    a,
    input    b,

    output   c
);


...
...
...


endmodule

        #(parameter)同样是定义了一个参数常量,但在实例化时,可在上层文件上修改该参数常量的值,而不修改底层文件,如下:

test 
#(
    .CNT    (99)
)
test_inst

(
    .a      (a_inst),
    .b      (b_inst),
    
    .c      (c_inst)
);

        这样,例化后的参数常量CNT取值为99。

你可能感兴趣的:(学习,fpga开发,1024程序员节)