Verilog比较器
我是verilog的新手 我做了很多研究,最后写了这段代码,但似乎不起作用 谁能帮我修一下吗Verilog比较器,verilog,comparator,Verilog,Comparator,我是verilog的新手 我做了很多研究,最后写了这段代码,但似乎不起作用 谁能帮我修一下吗 module comparator(); reg[3:0] a, b; wire[1:0] equal, lower, greater; if (a<b) begin equal = 0; lower = 1; greater = 0; end else if (a==b) begin
module comparator();
reg[3:0] a, b;
wire[1:0] equal, lower, greater;
if (a<b) begin
equal = 0;
lower = 1;
greater = 0;
end
else if (a==b) begin
equal = 1;
lower = 0;
greater = 0;
end
else begin
equal = 0;
lower = 0;
greater = 1;
end;
initial begin
$monitor($time,
"a=%b, b=%b, greater=%b, equals=%b, lower=%b",
a, b, greater, equal, lower);
a=9; b=10;
#100 $display ("\n", $time, "\n");
end
endmodule
模块比较器();
reg[3:0]a,b;
导线[1:0]相等、较低、较大;
如果(a行为程序必须包含在始终块中,如下所示:
此外,您的模块需要输入和输出。更正确的版本如下:
module comparator (
input wire [3:0] a,
input wire [3:0] b,
output reg equal,
output reg lower,
output reg greater
);
always @* begin
if (a<b) begin
equal = 0;
lower = 1;
greater = 0;
end
else if (a==b) begin
equal = 1;
lower = 0;
greater = 0;
end
else begin
equal = 0;
lower = 0;
greater = 1;
end
end
endmodule
您可以使用以下链接在EDA操场上玩此示例:
不带始终块:
module comparator (
input wire [3:0] a,
input wire [3:0] b,
output reg equal,
output reg lower,
output reg greater
);
assign equal = (a===b);
assign lower = (a<b)?1'b1:1'b0;
assign greater = (a>b)1'b1:1'b0;
end
模块比较器(
输入线[3:0]a,
输入线[3:0]b,
输出reg相等,
输出寄存器较低,
输出寄存器更大
);
分配相等=(a==b);
分配下限=(ab)1'b1:1'b0;
结束
请小心,你需要考虑“x”和“z”,使用“===”而不是“=”。我不熟悉您的技术,但一般来说,关于SE的好问题会有以下信息:什么具体不起作用?
您尝试过什么?
您能告诉我使用此代码比较9和10的方法吗?在测试台的初始块中,删除开始和结束之间的所有代码,并添加以下内容:I将a和b初始化为9和10,等待10个单位时间,并显示eq、lw和gr的值
module comparator (
input wire [3:0] a,
input wire [3:0] b,
output reg equal,
output reg lower,
output reg greater
);
assign equal = (a===b);
assign lower = (a<b)?1'b1:1'b0;
assign greater = (a>b)1'b1:1'b0;
end