gpt4 book ai didi

verilog - 模拟 Verilog 输出所有 X .. 我对 Reg vs Wires 非常小心

转载 作者:行者123 更新时间:2023-12-04 04:33:57 25 4
gpt4 key购买 nike

我正在竭尽全力试图弄清楚为什么模拟输出都是 X。通过在整个网络上查找 verilog 问题,在我看来,大多数问题都源于 reg 与 wire 的事故,但如果觉得它可能仍然是我的困境的根源。

如果有人能告诉我在编写我的模块和模块的测试台时我做错了什么,那将不胜感激。

该模块是一个存钱 jar ,可以根据硬币增加其信用或根据购买的元素删除信用。我正在使用一个 8 位累加器。

测试台还远未完成,但我只是想得到除“x”之外的东西无济于事。再次感谢您的帮助。

module piggyBank(clk, reset, penny, nickel, dime, quarter, apple, banana, carrot, date,         credit);
input clk, reset, penny, nickel, dime, quarter;
input apple, banana, carrot, date;
output [7:0] credit;
reg [7:0] tmp;

always @(posedge clk or posedge reset)
begin
if (reset)
tmp = 8'b00000000;
if (penny || nickel || dime || quarter)
tmp = tmp + penny + (5 * nickel) + (10 * dime) + (25 * quarter);
if (apple || banana || carrot || date)
tmp = tmp - (apple * 75) - (20 * banana) - (30 * carrot) - (40 * date);
end

assign credit = tmp;

endmodule

module testPiggyB();
reg clk;
reg reset, penny, nickel, dime, quarter;
reg apple, banana, carrot, date;
wire [7:0] credit;

initial begin
clk <= 0;
forever #5 clk <= ~clk;
reset <= 0;
penny <= 0; nickel <= 0; dime <= 0; quarter <= 0;
apple <= 0; banana <= 0; carrot <= 0; date <= 0;


#5quarter <= 1;
#40 quarter <= 0;
end
piggyBank pb(.clk(clk), .reset(reset), .penny(penny) ,.nickel(nickel), .dime(dime), .quarter(quarter), .apple(apple), .banana(banana), .carrot(carrot), .date(date), .credit(credit));

endmodule

最佳答案

您是否查看了模拟的输入以确保它们按预期切换?

您的 piggyBank 模块似乎没问题,但我猜您的测试台可能不会超出永远时钟语句,因为它将永远执行此行并且不会超出以下语句。因此永远不会进入季度,并且模块永远处于未重置/未修改状态。

尝试将时钟放入单独的初始 block 中。

initial begin 
clk = 0;
forever #5 clk = ~clk;
end

此外,您似乎从未断言重置。

最后,您似乎混淆了阻塞和非阻塞语句,尽管在您的情况下它对模拟不应该是致命的。通常你会希望你的触发器使用非阻塞赋值(<=),并且你的测试台顺序代码使用阻塞赋值(=)。

关于verilog - 模拟 Verilog 输出所有 X .. 我对 Reg vs Wires 非常小心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com