Re: [問題] 請問關於delay加法器的寫法
※ 引述《sasako (微笑待人)》之銘言:
: ※ 引述《aaming (............)》之銘言:
: : 最近寫verilog遇到了一個問題
: : 如下圖
: : In ----------> + ------>Out
: : | ^
: : | |(-)
: : | |
: : Z^(-128) |
: : | |
: : | |
: : -------
: : 由於用了128個dely cell 只會傻傻的使用一級一級串接的寫
: : 在撰寫上非常的不方便, 所以上來請教有高手可以幫個忙吧
: : 大家集思廣益一下, 非常感謝^^
: 假設in是 1bit 好了
: reg shift_register[127:0];
: integer i ;
: always @ (posedge clk or negedge n_rst)begin
: if(!n_rst)begin
: shift_register <= 'b0 ;
: end
: else begin
: shifer_register[0] <= #(1) in ;
: for(i=0 ; i<127 ; i=i+1)begin
: shifer_register[i+1] <=#(1) shifer_register[i] ;
: end
: end
: end
: 假如你的in是n bit
: 就寫n個always block
: 宣告和中間變數i部分就要自己調整
: 我只會這樣
: 不然就是叫C code幫你寫
假設這 delay line 的 bus 為 n-bit
寫法類似如上
reg [n-1:0] delay_r [0:127];
integer i;
always @ (posedge clk or negedge n_rst)
begin
if (!n_rst)
begin
for (i=0; i<128; i=i+1)
delay_r [i] <= n'h0;
end
else
begin
delay_r [0] <= in;
for (i=0; i<127; i=i+1)
delay_r [i+1] <= delay_r [i];
end
end
always @ (delay_r [127] or in)
out = delay_r [127] + in;
for 敘述基本上在 verilog 合成中就是將之 unroll,
因此 unroll 後會發現敘述就和你用一級一級推的寫法相同
for loop 的使用在今年剛舉行的 ic contest cell-based 組初賽
應該有不少人有利用 for loop 來寫初賽題目那一大坨的image buffer
回到原po這個問題,個人覺得應該改用two port memory取代這一大坨的暫存器
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.162.101.98
推
04/09 23:47, , 1F
04/09 23:47, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):