在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: rosshardware

[原创] 数字典型电路知识结构地图,请大家参考,也希望积极补充!

[复制链接]
 楼主| 发表于 2018-11-7 14:22:21 | 显示全部楼层
回复 99# zchdsp


    如果定义了符号属性,理论上if (a>b)也不会有问题,但是建议大家比较的时候加上$signed 用if ($signed(a) > $signed(b)) 主要目的是为了大家养成好的习惯,确保万无一失,没有歧义,另外如果前面定义的时候,忘了定义,这个地方也是一个很好地补充。这个也是synopsys推荐的哈。
 楼主| 发表于 2018-11-7 14:27:57 | 显示全部楼层
回复 94# zchdsp


    这种方式,肯定是按照1拍设计的方式来使用的,设计之前需要自己根据乘法器的位宽和你时钟频率来确定,你的设计能否满足1拍完成一个乘法运算,如果完成不了,可以考虑两种解决方式,一个例化DW IP,采用流水乘法器,这样实现一次乘法操作是多个周期,另外还是可以用*,只是设计采用Multicycle的方式,时钟约束按照mult cycle进行约束。 所以时序是设计出来的,不是随意去凑得哈。 是否用* 和还是DW,需要设计之前做评估,不是随意根据自己喜好去使用。通常来讲,1拍完成*的情况,*的优化效果会比DW好,这个synopsys的coding style 推荐也有讲哈。
 楼主| 发表于 2018-11-7 14:32:34 | 显示全部楼层




    我写的无符号的触发器,所以不存在符号位哈。第三个问题,应该是个笔误。
发表于 2018-11-7 16:03:25 | 显示全部楼层
回复 57# rosshardware


   应该是din[DIN_WIDTH-1 : CUT_WIDTH] == {1'b0,{(DOUT_WIDTH-1){1'b1}}}吧?
 楼主| 发表于 2018-11-7 21:20:41 | 显示全部楼层


回复  rosshardware


   应该是din[DIN_WIDTH-1 : CUT_WIDTH] == {1'b0,{(DOUT_WIDTH-1){1'b1}}}吧?
zchdsp 发表于 2018-11-7 16:03




嗯,好像是笔误了,多谢指正!
 楼主| 发表于 2018-11-8 10:42:54 | 显示全部楼层
上回我们讲到组合逻辑,分析由于路径延时差异,会存在竞争冒险,为了解决该问题,我们引入时序逻辑的概念,其基本思想,就是让信号在固定时钟周期上升沿(通常是采用上升沿)或者下降沿进行采集, 因为时钟周期通常都是ns级,而组合逻辑的延时通常在ps级,通过时序约束组合逻辑的路径延时,可以保证在时钟边沿不会采集到毛刺
                           __       __      __       __
   clk               __|    |__|    |__|    |__|    |__
                             ______          ________
   in0_out         ___|          |____|
                                        _______________
   in1_out         _________|
                                 _____             ________
   in0                 ____|          |______|
                                           _______________
   in1                __________|
                                           _             ________
   out               ___________| |______|                  
                                         毛刺
                           __       __      __       __      __
   clk               __|    |__|    |__|    |__|    |__|   |
                                                                       ________
  out_q            __________________________|   


大家可以从时序图可以看出,通过时序约束,时钟上升沿采集到组合逻辑稳定的结果,避免毛刺的传递,当然时序逻辑相对于组合逻辑来讲,输出的延时会增加,不像组合逻辑是在输入变化时刻,及时响应,产生变化,时序逻辑会在时钟下一拍产生结果,因为时序逻辑引入整体的延时会增加。

时序逻辑,在集成电路里面,通常采用的就是DFF,就是D触发器,很多数字电路里面会讲到JK触发器,施密特触发器之类,这个在数字集成电路里面基本都不会采用,所以初学者,不用再这里花费过多时间去理解各种触发器之间的差异。
 楼主| 发表于 2018-11-8 19:27:26 | 显示全部楼层
说道时序逻辑,就不得不提setup 和 hold这个概念,这个也是电路设计需要掌握的基本概念,
                             _______________         
                            |                          |
           din ---------| D                   Q  |------------------dout   
                           /|                          |
                 setup/  |   D Flip Flop        |
                          \ |                          |
           clk --------- |> clk                  |
                            |______________|      
                                                                    __________
                                                    |<setup> |
            clk     _________________|_______ |
                              safe before this| late after this
                   ___    _____________|___________________
            din   ___ X_____________ |___________________             case 0
                          |<positive slack> |
                                                    |
                    __________________|__________________
            din    __________________|______________X___             case 1
                                                     |<negative slack> |

STA对FlipFlop 做Setup的检查,其目的是确保数据(din)在时钟(clk)的有效沿之前到来,如上图所示,也就是说数据不要到的太晚了(Too Late), case0, 即数据din到达D触发器输入端时间早于时钟上沿,既可满足setup时序要求,case1 ,则数据din到达输入时间晚于时钟沿,不能满足setup要求。怎么分析时序路径,放到下一小节讲,这里只是让大家对setup 有一个基本概念。
                             _______________         
                            |                          |
           din ---------| D                   Q  |------------------dout   
                           /|                          |
                 hold  /  |   D Flip Flop        |
                          \ |                          |
           clk --------- |> clk                  |
                            |______________|      
                                                                    __________
                                                                   |<hold > |    |
            clk     _________________________ |             |    |___________
                                                        Early before this  | Safe after this
                   ___________________________________|__________________
            din   __________________________________ |________________X_  
                                                                                  |<positive slack> |
               


STA 对FlipFlop做Hold的检查,其目的是保证数据在时钟的有效沿后能够稳定保持并足够长的时间(Data Remain Stable Long Enough),以使时钟能够正确的打到数据,如下图所示,也就是说数据不要到的太早了(Too Early).

估计大家只单纯看这个定义会有一些迷糊,没有关系,后续我们做一个真正时序路径分析,大家对这个两个概念就会有比较清晰的认识了。
发表于 2018-11-9 13:07:27 | 显示全部楼层
赞一个,小白一个
发表于 2018-11-9 13:46:51 | 显示全部楼层
楼主能否给刚入行的小白点建议
 楼主| 发表于 2018-11-9 16:33:52 | 显示全部楼层


楼主能否给刚入行的小白点建议
Lucky_Boys 发表于 2018-11-9 13:46




    如果向入行做这个,就是先学习基本电路,集成电路最终实现是电路,Verilog 的RTL只是描述电路的一种方式,所以大家不要一开始就陷入到Verilog语言的语法,集成电路基本电路并不复杂,就是组合逻辑电路和时序逻辑电路,把电路和时序搞清楚,然后在写RTL其实就比较简单了,很快讲完时序逻辑,我就会给大家讲一些基本逻辑电路,对应Verilog RTL的写法也会给大家讲哈。大家主要要把RTL描述和仿真的行为级描述分开学习,因为本身Verilog描述RTL的语法比较简单,上手也会比较快。

   另外,这是一个工程课程,大家没有经验的小白,我觉得可以买一个简单的开发板,走走设计电路,到些代码,做仿真,综合到FPGA,最后实现全流程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 10:21 , Processed in 0.022389 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表