1.conditional ternary operator
module top_module (
input [7:0] a, b, c, d,
output [7:0] min);//
reg [7:0] out1,out2;
always@(a or b or c or d)begin
out1 <= a<b ? a:b;
out2 <= c<d ? c:d;
min <= out1<out2 ? out1:out2;
end
// assign intermediate_result1 = compare? true: false;
endmodule
2.reduction operators
module top_module (
input [7:0] in,
output parity);
assign parity=^in[7:0];
endmodule
3.reduction:even wider gates
module top_module(
input [99:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and= & in[99:0];
assign out_or= | in[99:0];
assign out_xor= ^ in[99:0];
endmodule
4.combinational for-loop:vector reversal 2
module top_module(
input [99:0] in,
output [99:0] out
);
integer i;
always@(i) begin
for(i=0;i<100;i=i+1) begin
out[99-i]<=in[i];
end
end
endmodule
我真是凸(艹皿艹 )了 为什么下面这个代码不可以(错误版)
module top_module(
input [99:0] in,
output [99:0] out
);
integer i;
always@(i) begin
for(i=99;i=0;i=i-1) begin
out[99-i]<=in[i];
end
end
endmodule
5.popcount255
我请问呢 哪里不对啊(错误版)
module top_module(
input [254:0] in,
output [7:0] out );
integer i,n=0,m;
always@(in or i or n or m) begin
for(i=0;i<255;i=i+1) begin
if(in[i])
m=n+1;
end
end
out=$dec2bin(m;8);
endmodule
正确版
module top_module(
input [254:0] in,
output [7:0] out );
integer i;
always@(in or i ) begin
out=0;
for(i=0;i<255;i=i+1) begin
if(in[i])
out=out+1;
else
out=out;
end
end
endmodule
6.adder100i
我说我真的很讨厌加法器(其实是因为没搞懂)
module top_module(
input [99:0] a, b,
input cin,
output [99:0] cout,
output [99:0] sum );
assign sum[0] = a[0]^b[0]^cin;
assign cout[0] = a[0]&b[0] | a[0]&cin | b[0]&cin;
always @(*)begin
for(integer i = 1;i<100;i++)begin
sum[i] = a[i]^b[i]^cout[i-1];
cout[i] = a[i]&b[i] | a[i]&cout[i-1] | b[i]&cout[i-1];
end
end
endmodule
7.bcd add100
真的写不出来 等我搞懂了加法器再来写