这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 问个有关综合的问题

共6条 1/1 1 跳转至

问个有关综合的问题

菜鸟
2013-02-28 14:31:37     打赏
 

做第二个实验的时候

看到这段代码

 

我把这段代码揪出来做了一些简单的调整单独做成一个module进行综合得到了以下情况

做的调整是 首先把led的八位信号变成两位,增加一个两位的输入in信号,将移位操作去掉变成ledin赋值;此外我认为delay_cnt类似于一个使能信号,单独做成module的话抽出来成为一个输入管脚,也就是代码如下

 

module dfif(sys_clk,sys_rstn,led,delay_cnt,in);

     input sys_clk;

      input sys_rstn;

      input[1:0] in;

      input delay_cnt;

      output[1:0] led;

     

      reg[1:0] led;

     

     always@(posedge sys_clk, negedge sys_rstn)

             begin

                    if(!sys_rstn)

                         led<=2'b11;

                          else if(delay_cnt==1'b1)

                                 led<=in;

                                    /*begin

                                       if(led==8'b00000000)

                                              led<=8'b11111111;

                                        else led<=led<<1;

                                    end */

                                    else led<=led;  

                end

endmodule

 

综合出来的实际电路图是

图片2

 

 

 

图上红线部分接入了D触发器的使能信号

然后我对上面的代码又做了一点调整,将inled都分别改成一位,也就是成为一个彻底的带使能的D触发器的代码

如下

module diff2(sys_rstn,sys_clk,in,led,delay_cnt);

   input sys_rstn;

   input sys_clk;

   input in ;

   input delay_cnt;

   output led;

   reg led;   

    always@(posedge sys_clk, negedge sys_rstn)

             begin

                    if(!sys_rstn)

                         led<=1'b1;

                          else if(delay_cnt==1'b1)

                                 led<=in;

                                    /*begin

                                       if(led==8'b00000000)

                                              led<=8'b11111111;

                                        else led<=led<<1;

                                    end*/

                                    else led<=led;   

                end

endmodule

 

综合出来实际电路为

图片3

 

 

观察上面的delay_cnt使能信号输入线

问题来了:

两段代码除了输入和输出的数据位宽不一样,为什么综合出来的有如此差异?

作为输入和输出为两位位宽的综合出来实际电路对于D触发器,delay_cnt输入到的是D触发器本身内部的使能管脚ENA;但是当输入和输出位宽为1的时候,也就是一个典型的D触发器的时候,综合出来的结果delay_cnt却是和in经过一个二选一进入D触发器本身,而D触发器本身的使能ENA压根没有用到?对于这两段仅仅数据位宽不一样,但是结构完全一样的代码,综合器为什么综合结果采取两种不同的结果?

二者作为RTL综合出来的结果在结构上市完全一致的,那么为什么实际电路却有如此差异?

祝各位工作顺利

 




关键词: 问个     有关     综合     问题     delay    

菜鸟
2013-02-28 14:34:27     打赏
2楼

相信我的问题描述清楚了

图片看不清的话 按住ctrl+鼠标滚轮可以看到大图

希望能够得到明确的回复

谢谢诸位


高工
2013-03-02 12:33:49     打赏
3楼

在你修改后的代码中led定义的位宽是2位或者1位,怎么你的代码中还有如下代码呢?

/*begin

                                       if(led==8'b00000000)

                                              led<=8'b11111111;

                                        else led<=led<<1;

                                    end*/

这明显有问题,你的综合报告中没有相关的warning吗?


菜鸟
2013-03-02 15:46:40     打赏
4楼

这个不是多行注释呀

难道这个会影响综合??

我试试去


菜鸟
2013-03-02 16:13:43     打赏
5楼

我把这些代码删掉以后依旧是就问题



高工
2013-03-02 21:09:13     打赏
6楼

确实是多行注释,没有注意看。

你得出这样的差异,可能和综合器的选项设置有关,进行了一些额外的优化


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]