1、全加器设计
全加器考虑进位输入与进位输出,以4位全加器为例:
module full_add(
input rst_n,
input clk,
input [3:0]a,
input [3:0]b,
input cin,
output reg [3:0]sum,
output reg cout
);
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
{cout,sum} <= 5'b0;
end
else
begin
{cout,sum} <= a+b+cin;
end
end
endmodule
2、4选1数据选择器
按照组合逻辑实现,可以使用case语句(应注意case的语法):
module choose41(
input a1,
input a2,
input a3,
input a4,
input [1:0]sel,
output reg c
);
always@(*)
begin
case(sel)
2'b00:begin
c = a1;
end
2'b01:begin
c = a2;
end
2'b10:begin
c = a3;
end
2'b11:begin
c = a4;
end
default:begin
c = a1;
end
end
3 、译码器
译码器将输入编码转换为对应输出,以3_8译码器为例:
module decode3_8(
input en,
input [2:0]code,
output reg[7:0]state,
);
always@(*)
begin
if(!en)
begin
state <= 8'd0;
end
else
begin
case(code)
3'b000:begin
state = 8'b0000_0001;
end
3'b001:begin
state = 8'b0000_0010;
end
3'b010:begin
state = 8'b0000_