我是ASIC设计的新手。我有一个设计,例如两个输入 a,b。我正在使用以下代码来初始化这两个信号。但是设计编译器会生成一个警告,即寄存器“a”是一个常量,将被删除。当我尝试进行综合后仿真时,这两个信号都是“z”。那么如何应用初始信号分配来避免这样的问题呢?
always @(posedge(clk) or posedge (rst)) begin
if (rst) begin
a<=4d'5;
b <=4'd10;
end
end
在描述硬件系统时,您需要考虑到模块的输入信号来自另一个模块/系统,它们的值由该信号决定。任何模块的输入只能是wire
类型。
您可以将模块视为具有输入和输出的盒子。输出信号的值由输入信号+盒子内部的逻辑决定。但是,模块无法决定其输入应该是什么。只有在有反馈的情况下才有可能,即使在这种情况下,它也将取决于模块控制之外的其他信号。
结果,可以将输出信号声明为,output reg
但对于输入,情况并非如此。但是,您的问题有解决方案,我认为您可以使用以下方法设计您想要的:
module your_module(
input clk,
input rst,
//other inputs and outputs that you might need
input [3:0] a,
input [3:0] b
);
//define registers
reg [3:0] a_register;
reg [3:0] b_register;
/*
These registers are defined to make it possible to
to give any value to that logics when posedge rst
is detected, otherwise you can use them as your
input logics
*/
//use initial block if you need
always@(posedge clk or posedge rst) begin
if(rst) begin
a_register <= 4'd5;
b_register <= 4'd10;
end
else
begin
a_register <= a;
b_register <= b;
// and use a_register and b_register as you want to use a and b
end
end
endmodule