学习笔记(37~43)
学习阶段:有问题发大家一起讨论。
题目37
题目大意:给你四个数,用三目运算符找到最小值。
题目分析:三目运算符的嵌套使用。
答案:
module top_module (
input [7:0] a, b, c, d,
output [7:0] min);//
assign min = (a<b)?((a<c)?((a<d)?(a):(d)):((c<d)?(c):(d))):((b<c)?((b<d)?(b):(d)):((c<d)?(c):(d)));
endmodule
题目38
题目大意:判断八位输入的奇偶校验,并输出。
题目分析:数据的奇偶校验可以通过按位异或实现。
答案:
module top_module (
input [7:0] in,
output parity);
assign parity = ^in;
endmodule
题目39
题目大意:中构建一个具有 100 个输入的组合电路。
有3个输出:
:输入与门的输出。
: 输入或门的输出。
: 输入异或门的输出。
题目分析:语法按位运算使用。
答案:
module top_module(
input [99:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and = ∈
assign out_or = |in;
assign out_xor = ^in;
endmodule
题目40
题目大意:把100位的输入向量颠倒顺序。
题目分析:使用循环语句。的使用for,后需要加个标号,用于循环模块实例化(没有实例化也要写)。
答案:
module top_module(
input [99:0] in,
output [99:0] out
);
genvar i;
generate
for(i=0;i<100;i=i+1)begin:bit_order
assign out[i] = in[99-i];
end
endgenerate
endmodule
题目41
题目大意:数出输入向量中1的个数并输出。
题目分析:也是用循环解决使用--for结构。
答案:
module top_module(
input [254:0] in,
output [7:0] out );
integer i; //此处不能使用genvar,因为其无法在always中被赋值
generate
always@(*)begin
out = 8'b0;
for(i=0;i<255;i=i+1)begin:pop
if(in[i])
out = out + 1'b1; //使用阻塞赋值,非阻塞赋值会生成latch,因为这是组合逻辑
else
out = out ;
end
end
endgenerate
endmodule
1、时序逻辑,使用 “非阻塞赋值”
2、锁存器(latch)建模,使用 “非阻塞赋值”
3、组合逻辑,使用 “阻塞赋值”
4、当在同一个 块里面既为组合逻辑又为时序逻辑时,使用“非阻塞赋值”
5、组合逻辑输出时,为消除毛刺会在输出端加一个触发器,即使用非阻塞赋值
题目42
题目大意:通过实例化100个全加器来实现一个的二进制加法器。该加法器有两个的输入和cin,输出为sum与cout。为了鼓励大家使用实例化来完成电路设计,我们同时需要输出每个全加器的cout。 故cout[99]标志着全加器的最终进位。
题目分析:使用结构循环实例化。
答案:
module top_module(
input [99:0] a, b,
input cin,
output [99:0] cout,
output [99:0] sum );
fadd instance1(
.a(a[0]),
.b(b[0]),
.cin(cin),
.cout(cout[0]),
.sum(sum[0])
);
genvar i;
generate
for(i=1;i<100;i=i+1)begin:add
fadd instance2(
.a(a[i]),
.b(b[i]),
.cin(cout[i-1]),
.cout(cout[i]),
.sum(sum[i])
);
end
endgenerate
endmodule
module fadd(
input wire a,b,cin,
output wire cout,
output wire sum
);
assign sum = a^b^cin;
assign cout = a&b | a&cin | b&cin;
endmodule
题目43
题目大意:我们为您提供了一个名为的BCD单位加法器,它将两个BCD数字相加并进行进位,然后生成一个求和并进行进位。实例化100份以创建100位bcd进位加法器。
题目分析:使用结构循环实例化。
答案:
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
wire [99:0] cout1;
bcd_fadd instance1(
.a(a[3:0]),
.b(b[3:0]),
.cin(cin),
.cout(cout1[0]),
.sum(sum[3:0])
);
genvar i;
generate
for(i=1;i<100;i++)begin:bcd_add
bcd_fadd instance2(
.a(a[4*i+3:4*i]),
.b(b[4*i+3:4*i]),
.cin(cout1[i-1]),
.cout(cout1[i]),
.sum(sum[4*i+3:4*i])
);
end
endgenerate
assign cout = cout1[99];
endmodule
评论(0)