方案(一)
1.设计原理
设计代码实现原理:使用连续复制语句,分别对a大于b,a小于b,和a=b 进行判断,如果判断成功则将对应的结果 re reb eq 赋值为1,如果判断失败,则将其赋值为0.
仿真实现原理:先对ab进行相等赋值便于仿真观察,延时10个单位,之后利用重复函数repeat重复100次, 使用random 函数对256取余实现8位的随机产生。
2.设计方案
module test (
input wire [7:0] a,
input wire [7:0] b,
output wire re,
output wire reb,
output wire eq
);
assign re = (a>b)? 1'b1:1'b0;
assign reb = (a<b)? 1'b1:1'b0;
assign eq = (a==b)? 1'b1:1'b0;
endmodule
3.仿真测试
`timescale 1ns/1ns
module test_tb();
reg [7:0]a;
reg [7:0]b;
wire re;
wire ref;
wire eq;
test i1(a,b,re,ref,eq);
initial
begin
a=8'd1;
b=8'd1;
#10
repeat(100)
begin
a={$random}%256;
b={$random}%256;
#10;
end
$stop;
end
endmodule
4.结果分析

如上图三条黄线所示,
可以看到当a=b=1时,eq=1,其余两个输出为0,
当a=9,b=99时,ref=1,其余两个输出为0,
当a=101,b=18时,re=1,其余两个输出为0.0
方案(二)
1.设计原理
设计代码实现原理:使用行为级描述语句,always分别对a大于b,a小于b,和a=b 进行判断,如果判断成功则将对应的结果 re reb eq 赋值为1,如果判断失败,则将其赋值为0.
仿真实现原理:先对ab进行相等赋值便于仿真观察,延时10个单位,之后利用重复函数repeat重复100次, 使用random 函数对256取余实现8位的随机产生。
2.设计方案
module test (
input wire [7:0] a,
input wire [7:0] b,
output reg re,
output reg reb,
output reg eq
);
always@(*)
begin
if(a>b)
re=1'b1;
else
re=1'b0;
if(a<b)
reb=1'b1;
else
reb=1'b0;
if(a==b)
eq= 1'b1;
else
eq=1'b0;
end
endmodule
3.仿真测试
`timescale 1ns/1ns
module test_tb();
reg [7:0]a;
reg [7:0]b;
wire re;
wire reb;
wire eq;
test i1(a,b,re,reb,eq);
initial
begin
a=8'd1;
b=8'd1;
#10
repeat(100)
begin
a={$random}%256;
b={$random}%256;
#10;
end
$stop;
end
endmodule
4.结果分析

如上图三条黄线所示,
可以看到当a=b=1时,eq=1,其余两个输出为0,
当a=9,b=99时,ref=1,其余两个输出为0,
当a=101,b=18时,re=1,其余两个输出为0.0
文章描述了两种Verilog方案来实现比较逻辑模块,分别基于连续赋值和行为级描述。在每次仿真中,随机生成8位数值并检查输出是否正确反映了a大于b、a小于b和a等于b的条件。测试结果显示模块功能符合预期。



6080

被折叠的 条评论
为什么被折叠?



