功能模块的构建
经典构建格式举例
module test_dec(
din,
a0,
b0,
dout
);
//module接入口定义
input wire [2:0] din;
input wire [15:0] a0, b0;
output reg [7:0] dout;
//内部接线
wire [16:0] sum;
//例化
add u0_add(
.in0(a0);
.in1(b0);
.sum(sum)
);
//赋值语句
always @(*) begin
case(din)
3'b000: dout = 8'h01;
3'b001: dout = 8'h02;
3'b010: dout = sum[7:0];
3'b100: dout = 8'h04;
default: dout = 8'h00;
endcase
end
endmodule
根据bit位由高到低采用二选一选择器进行组合
- 有符号数符号位扩展
- 在加减过程中,默认无符号数进行数据运算,但是,其实是存在有符号的情况,需要人为进行符号位扩展
wire [15:0] a, b;//signed nunber wire [16:0] out; assign out = {a[15], a} - {b[15], b};
- 同步复位电路
- 指的是必须在clk上升沿来到时才能进行复位
always @(posedeg clk)begin if(!rstn) out <= 1'd0; else out <= din; end
- 异步复位电路
- 不考虑时钟上升沿,只要复位信号有效即可
always @(posedeg clk or negedge rstn)begin if(!rstn) out <= 1'd0; else out <= din; end