该设计包含一个或多个带有效位的寄存器或锁存器 异步设置和异步重置。虽然可以建立此电路, 它在面积,功率和功耗方面创建了次优的实现方式 性能。
Initial_LFSR2 initial_value(RNTI,NCELL_ID,nss,nf,init) ;
always@(posedge scr_clk or posedge scr_rst) begin // Asynchronous Reset
if(scr_rst) begin
LFSR1 <= 31'b1000000000000000000000000000000 ;
LFSR2 <= init ;
counter <= 0 ; // reinitialized the initialzation steps counter
input_counter <= 0 ;
end
请帮助
答案 0 :(得分:1)
首选解决方案是使LFSR2
重设值是一个常数。参数可以是常数/参数的表达式,也可以是将常数/参数作为输入的函数。更改代码可能需要一些努力,但这是获得“ 在面积,功率和性能方面的最佳实现”所需要完成的工作。
parameter LFSR2_INIT = initial_LFSR2_func(RNTI,NCELL_ID,nss,nf);
always @(posedge scr_clk or posedge scr_rst) begin
if (scr_rst) begin
LFSR2 <= LFSR2_INIT;
end
else begin
LFSR2 <= next_LFSR2;
end
end
如果绝对必须由组合逻辑确定复位值,那么有最后一种选择。与参数解决方案相比,它在面积,功耗和性能方面都是“ 次佳的实现方式” ,但可能会比您目前拥有的更好。请注意,init
上的逻辑越复杂,“ 次优”就越多。
如果您以FPGA为目标,则可能无法使用;因为他们倾向于通过异步设置/重置对触发器提供有限的支持。您确实使用xilinx标记了问题,该问题是针对FPGA的。您确实需要弄清楚为什么根本需要异步设置/重置。尝试使您的代码仅适用于同步触发器(不设置/重置异步)。如果需要异步设置/重置,请花额外的精力来弄清楚如何使参数方法起作用。
由于这是不得已的选择,因此默认情况下不会显示。
用独立的异步设置和复位信号统一每个触发器。
逻辑将添加区域。额外的走线和时间,以稳定冲击性能。稳定时间也会影响功率。如果在wire [LFSR2_WIDTH-1:0] lfsr2_set = {LFSR2_WIDTH{src_rst}} & init; wire [LFSR2_WIDTH-1:0] lfsr2_rst = {LFSR2_WIDTH{src_rst}} & ~init; genvar gidx; generate for(gidx=0; gidx<LFSR2_WIDTH; gidx=gidx+1) begin : LFSR2_genblk always @(posedge src_clk, posedge lfsr2_rst[gidx], posedge lfsr2_set[gidx]) begin if (lfsr2_rst[gidx]) begin LFSR2[gidx] <= 1'b0; end else if (lfsr2_set[gidx]) begin LFSR2[gidx] <= 1'b1; end else begin LFSR2[gidx] <= next_LFSR2[gidx]; end end end endgenerate
init
为高的情况下src_rst
用中间值切换a,则功率和性能会变差。