前言
视频语法学习:B站链接
笔记原地址:https://github.com/Tan-YiFan/DigitalLogic-Autumn2020/tree/syntax/syntax网络不好,可能打不开。
parameter
引入元件例化的语法,有很多好处。
然而,已有的模块设计语法,缺乏flexibility。
适用同一算法int(32位)和long(64位) long的加法器,需要写两个。
为了使模块代码具有更高的复用性,引入参数parameter。
module adder #(
parameter int N = 16,//parameter+类型+常量名,等号后面是默认值
parameter logic [31:0] W = 32'd100000,//无符号32位
parameter type element_t = logic[31:0]//parameter+type+类型名,等号后面是默认默认的类型
)(
input logic[N-1:0] a, b,//输入是16位的a,b
output logic[N-1:0] c//输出是16位的c
);
assign c = a + b;
endmodule
logic [31:0] a, b, c;
adder #(.N(32), .element_t(logic [63:0])) adder_inst1(.a, .b, .c);
//重新对N赋值为32;element_t(logic [63:0]),此时,就是32位的加法器了
logic [15:0] d, e, f;
adder adder_inst2(.a(d), .b(e), .c(f));
endmodule
module top #(
parameter logic SIM = 1'b0//仿真时间
)(input logic clk, resetn
);
module sim();//修改仿真时间
top #(.SIM(1'b1)) top_inst (.clk, .resetn);
// -DDEBUG
endmodule
parameter也可用于全局常量声明。作为一句语句,它以分号结尾。
parameter logic[5:0] OP_ADDI = 6'b000010;//便于修改
always_comb begin
unique case(op)
OP_ADDI: begin
end
endcase
end