我是ASIC设计的新手。我有一个设计,例如两个输入a,b。我正在使用以下代码初始化这两个信号。但是Design编译器会生成警告,指出寄存器“ a”是一个常量,将被删除。当我尝试进行合成后仿真时,这两个信号都是“ z”。那么如何应用初始信号分配来避免此类问题?
always @(posedge(clk) or posedge (rst)) begin
if (rst) begin
a<=4d'5;
b <=4'd10;
end
end
答案 0 :(得分:2)
在描述硬件系统时,您需要考虑到模块的输入信号来自另一个模块/系统,并且它们的值由该信号确定。任何模块的输入只能是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