作者Aragom (清风阑夜起)
看板Electronics
标题Re: [问题] 请问关於delay加法器的写法
时间Wed Apr 9 10:50:39 2008
※ 引述《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
1F:推 aaming:谢谢大大^_^ 04/09 23:47