有没有简单的方法写译码器啊?
分段译码好了,写一个小的译码器,多例化几遍。不过也是个体力活。
是啊 很容易出错,不过分段写应该会好点
做多级例化。不过最后的管脚是省不掉的。呵呵
用个rom寻址也可以,前提是要初始化好rom
重复的代码,先把需要重复的部分写到一行中,复制N份。然后用ultraedit列块模式,使用excel生成序列,复制到ultraedit中,然后很快就搞定了。
下面举个例子,注意把循环重复的部分定义为数字序列。
RA1SHD8192x8 img_buff_ram_0_inst (.Q( q0 ),.CLK( clock & ram_0_clk_en),.CEN(~(rden_r[0 ] | wren_r[0 ])),.WEN(~wren_r[0 ]),.A( address[12:0]),.D( data));
RA1SHD8192x8 img_buff_ram_1_inst (.Q( q1 ),.CLK( clock & ram_1_clk_en),.CEN(~(rden_r[1 ] | wren_r[1 ])),.WEN(~wren_r[1 ]),.A( address[12:0]),.D( data));
RA1SHD8192x8 img_buff_ram_2_inst (.Q( q2 ),.CLK( clock & ram_2_clk_en),.CEN(~(rden_r[2 ] | wren_r[2 ])),.WEN(~wren_r[2 ]),.A( address[12:0]),.D( data));
RA1SHD8192x8 img_buff_ram_3_inst (.Q( q3 ),.CLK( clock & ram_3_clk_en),.CEN(~(rden_r[3 ] | wren_r[3 ])),.WEN(~wren_r[3 ]),.A( address[12:0]),.D( data));
这方法不错
其实可以用 generate语句,比如我要串联100个 buffer(input I,output Z):
- wire [99:0] n;
- //buffer u0(.I(n[0]),.Z(n[1]));
- genvar i ;
- generate for(i=1;i<100;i=i+1)
- begin : buf_inst
- buffer u(.I(n[i-1]),.Z(n[i]));
- end
- endgenerate
for语句有人说不可以综合,你怎么看?
你查下 generate就知道了
integer i;
generate
for (i = 0; i < N; i = i + 1)
begin: FLP
XXX;
end
endgenerate
如果用for循环做不太复杂(可以清楚的知道合出来的电路是什么样子的)的东西还是比较方便的,如果不太好分析FOR循环合成出来什么样子,那可以使用如Perl之类的脚本自动生成这些代码好了,只写一遍,还不会出错,省时省力。
好的,看看。
