verilog位拼接的理解

verilog位拼接的理解

//3位加法器
module add(
a,b,c,
sum
);

input  [2:0] a,b;
input        c;
output [3:0] sum;

assign sum = a + b + c;

endmodule
//位拼接符的理解
module add(
a,b,c,
count,sum
);
input [2:0] a,b;//这里定义a,b为3位位宽
input c; //c为一位位宽
output count;
output [2:0] sum;
/*error
//这里的a + b最高可以得出4位位宽
//例如:a=3’b111;
// b=3’b111;
// sum = 4’b1110
assign sum = a + b; //这里由于sum是3位的导致无法给高位赋值

*/
//位拼接符的作用
assign {count,sum} = a + b + c;
//将count位和sum位拼接起来,这里的最高位
//由count代替,sum表示低3位
//为上面所说的{count,sum} = {1,110}
endmodule

//仿真测试一个例子
module add(
a,b,c,
co,sum
);

input a,b,c;
output co,sum;

assign {co,sum} = a + b + c;

endmodule

module test_add;

//定义变量
reg a,b,c;
wire co,sum;

//例化原模块
add add1(.a(a),.b(b),.c©,.co(co),.sum(sum));

initial
begin:ONLY_ONCE
reg [2:0] num;
for(num = 0;num <= 3’b111;num = num +1) begin
//拼接赋值
{a,b,c} = num;
//显示
#5 $display("%b%b%b = “,a,b,c,”—%b%b",co,sum);
end
end
endmodule

你可能感兴趣的:(FPGA,编程)