微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > case语句分支太多如何优化?

case语句分支太多如何优化?

时间:10-02 整理:3721RD 点击:
如下面所示,一共有2000多个分支,请问如何优化以减少资源消耗?

begin
     case(index)
          12'd0 :cmd_data = {1'b1, 10'h000, 8'h42};
          12'd1 :cmd_data = {1'b1, 10'h3DF, 8'h01};     
          12'd2 :cmd_data = {1'b1, 10'h2A6, 8'h0E};     
          12'd3 :cmd_data = {1'b1, 10'h2A8, 8'h0E};     
          12'd4 :cmd_data = {1'b1, 10'h292, 8'h08};     
          12'd5 :cmd_data = {1'b1, 10'h293, 8'h80};     
          12'd6 :cmd_data = {1'b1, 10'h294, 8'h00};     
          12'd7 :cmd_data = {1'b1, 10'h2AB, 8'h06};     
          12'd8 :cmd_data = {1'b1, 10'h2AC, 8'h73};     
          12'd9 :cmd_data = {1'b1, 10'h009, 8'h07};
          ……
          12'd2566 :cmd_data = {1'b1, 10'h050, vco_data[23:16]};
          12'd2567 :cmd_data = {1'b1, 10'h057, vco_data[15:8]};
          12'd2568 :cmd_data = {1'b1, 10'h261, vco_data[7:0]};     
     endcase
end

使用Block RAM吧,将所有数据写到BRAM中,然后根据INDEX读出。

可以这样吗
case(index[11:8])
     4'd0: case(index[7:4])
              4'd0:case(index[3:0])
                     4'd0:
                     4'd1:
                     ……
                     endcase
              4'd1:
              ……
             endcase              
     4'd1:
     ……
endcase



   我觉得这个本质上和一个case没有太大区别,仍然都是遍历0~2047,使用LUT和FF资源。

去掉高位固定的1,不就是1块BRAM的事情吗



   高位的1貌似是寄存器读写使能,1表示写,0表示读

首先要把ROM和MUX_OP部分区分开来。就你上面的例子,最后三个index的低8位就是MUX_OP,其他的就是ROM

猜測應該是某IC的register設定
然後透過SPI之類的介面去讀寫吧
把所有command存到ROM就行了

LUT貌似可以

看起来你的输出可能是常量,也可能是某个变量输入,常量部分可以用ROM,变量部分要用MUX,具体怎么简化取决于地址空间和输出的对应情况。

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

网站地图

Top