微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 有没有简单的方法写译码器啊?

有没有简单的方法写译码器啊?

时间:10-02 整理:3721RD 点击:
刚刚写了一个译码器,写了360行。大部分都是重复的。我是8位的行译码器,光位线就256根,每根都写出来感觉有点麻烦啊。这要12位的怎么办。?

分段译码好了,写一个小的译码器,多例化几遍。不过也是个体力活。



    是啊 很容易出错,不过分段写应该会好点

做多级例化。不过最后的管脚是省不掉的。呵呵

用个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):

  1. wire [99:0] n;
  2. //buffer u0(.I(n[0]),.Z(n[1]));

  3. genvar i ;
  4. generate for(i=1;i<100;i=i+1)
  5. begin : buf_inst
  6. buffer u(.I(n[i-1]),.Z(n[i]));
  7. end
  8. endgenerate

复制代码



    for语句有人说不可以综合,你怎么看?



   你查下 generate就知道了

integer i;
generate
    for (i = 0; i < N; i = i + 1)
    begin: FLP
        XXX;
    end
endgenerate

如果用for循环做不太复杂(可以清楚的知道合出来的电路是什么样子的)的东西还是比较方便的,如果不太好分析FOR循环合成出来什么样子,那可以使用如Perl之类的脚本自动生成这些代码好了,只写一遍,还不会出错,省时省力。



    好的,看看。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top