作者FTICR (FT-ICR)
看板Electronics
标题Re: [问题] Verilog 用 data edge 作为讯号输入
时间Mon Jan 4 20:28:00 2016
※ 引述《Baneling (爆炸一哥)》之铭言:
: 标题: Re: [问题] Verilog 用 data edge 作为讯号输入
: 时间: Mon Jan 4 02:02:15 2016
: 看你的想法我大概会有几个疑问吧
: 1.你这样写或者要实现这样的function想要得到什麽样的好处?
: 一般来说如果真的要对clock动手脚一定会有甚麽原因
: 不外乎操作速度要更快或者面积要更小, 或者是逼不得已的情况(介面处理)
因为输入讯号(a)类似pulse,且它pulse width 很短没办法用 synchronous
: 2.clk与a这两个讯号的关系?
: 如果a是源自於clk的讯号,简单来说就是同步的东西
: 那就在状态转换的时候写一个条件去判断就好了
: 如果是不同步的两个讯号, 那状态机为何要用两个不同的clock去驱动?
: 而且处理不同步的讯号也不是用这种方式去处理的~
我知道如果是 synchronous 就好解决,但不清楚处理这样 asynchronous 讯号该怎麽做,
所以才想这些做法
:
: 如果你真的想要把这种做法实现,我大概会用这种方式去写
:
: always@(posedge clk_a or negedge rst) begin
: if(!rst) state<=state_1;
: else begin
: case(state)
: state_1: begin
: state<=state_2;
: end
: state_2: begin
: ..
: ..
: endcase
: end
: end
:
: assign clk_a=(state==state_1) ? a : clk;
:
: 只是你在synthesis以及APR的时候对clock下的constraint
: 还是要去思考我上面问的那些问题
: (考虑clk_a, clk, a等讯号之间的关联性)
了解! 感谢 Baneling 大,我研究看看是否可行
:
: 真心建议你,先把"可合成"的verilog语法弄熟,其实当初教我做数位IC的人讲过一句话
: 你写的verilog大多是把你想像中的硬体写出来,硬体我们能用的不外乎就是flip flop
: latch跟logic gate,因此procedural block中的sensitivity list会写成这样
: 简单来说就是模拟器执行这些可合成语法的方式会类似真实电路的动作
: 因此这些语法就会被归类为"可合成"
: 是因为合成软体看到这类型的code会找出相对应的硬体。
: 如果短时间之内没办法做到这种程度就先了解到
: "testbench想怎麽写没关系,但设计一定要用可合成的语法"
之前是有写过一些很简单的 Verilog 做完合成、APR,也蛮清楚要用硬体的观点去想,
只是这个 case 可能有点特殊所以卡住了
: : 我想把 Verilog code 画成电路这我作的到
: 其实你想像中的情况跟我想表达的情况应该有一段差距 :s
: :
: : 想了一段时间,不知道 sequentail part 这样写是不是一个方法?
: : //sequentail part
: : always@(posedge clock or posedge a) begin
: : if (rst) begin //synchronous reset
: : state <= state_1;
: : ...
: : end
: : else if (a && state==state_1) begin
: : state <= state_2;
: : end
: : else begin
: : state <= next_state;
: : ...
: : end
: : end
: 可能我用的standard cell比较单纯,我几乎没写过这种可以被两个clock trigger
: 的procedural block,一般来说没有DFF可以同时被两种clock触发,所以这种写法
: 就算能用,在coding style上来说也是很不好
还不确定是不是 synthesizable、模拟对不对
: 要也是像我上面那样写,先把clock处理过後再送到DFF。
: (当然constraint要怎麽下又是另外一回事了)
:
: 另外建议你,写FSM就把comb跟sequ写在一起了,因为大部分写法都把控制讯号
: 跟FSM的state写在一起,当你状态很多的时候描写state的procedural block会拖很长
: 你每个控制讯号独立写成单一procedural block,debug的时候你看自己的code
: 会上上下下拉到很想死。
感谢,因为上课的时候都是学到这样的写法,顶多功能不同电路分到不同的 always block
或 module来写
: : 推 ptta: 就是把一个 之 comb signal当成 clock,可以合成,十年前就看 01/03 17:11
: : → ptta: 过了 01/03 17:11
: 其实有经验,code写出来有相对应的synthesis以及APR(CTS)的constraint
: 要怎麽做大概都可以,问题就在於很多人在下constraint的时候其实都没有弄得很清楚
: EDA tool解读这些constraint的方式还有处理电路的手法,如果是这种情况
: 我觉得就先别去把设计搞这麽复杂了,single clock domain的设计先弄清楚吧~
: 原po写code的方式感觉就是刚出新手村,就不太建议自己去找麻烦 XD
确实没有太多经验,只写过一些简单的电路 (像是自动贩卖机@@)
: : 推 Leadgen: Comb signal当clock,不怕有glitch吗? 01/04 00:04
: 嗯呀,真的要对clock动特别的手脚(除频以外的功能),也是使用DFF的输出居多。
: 不过CTS也要另外处理,通常是吃力不讨好
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 182.234.146.229
: ※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1451844137.A.365.html
: 推 obov: 把verilog/HDL当C(or其他)写的人 尤其是以前资工转硬体的 01/04 02:41
: → obov: 最常见的观念错误就是 不懂甚麽叫做DFF 01/04 02:42
: → obov: DFF最重要的一个特性 就是setup/hold time 01/04 02:42
: → obov: 这是当代绝大多数数位电路设计的核心 01/04 02:43
我非 EE 本科 (也跟资工、软体无关),只是对硬体很有兴趣想多了解,所以才想学这些
数位逻辑、IC 设计都修过,setup time/hold time/time borrowing/timing violation
这些概念上课也都有学到
: → Baneling: 他们会觉得那是一种变数~ 01/04 03:04
: 推 xanter: 原PO写的CODE真的像新手村出来的 01/04 10:16
: → tonybin: 竟然需要教主出来教电子学 囧 01/04 18:08
: 推 cebelas: 教主安安 01/04 18:35
感谢 B 大和各位前辈的指导 小弟不懂的东西还太多了 QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.55.232
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1451910481.A.94F.html
1F:推 Baneling: 如果还在学校 建议去听一下VLSI, 关键电路听懂 後续步骤 01/04 21:01
2F:→ Baneling: 的constraint会有感觉很多~ 之後要学进阶去摸primetime 01/04 21:02
感谢 B 大 我想112的"IC设计"就是类似VLSI的课,用Integrated Circuit Design
(CMOS VLSI Design) 这本书 (Weste) pt、pp 之前跑 design flow 有教过
但还是不很清楚 pt 和 dc 中的 timing analysis 有什麽差别
※ 编辑: FTICR (219.70.169.149), 01/04/2016 22:32:07
3F:→ Baneling: pt的timing比较完整,能验的东西也多很多,至於你说为何 01/04 22:51
4F:→ Baneling: 不跟DC做再一起,只能说商业考量吧 XD 01/04 22:51
5F:推 cebelas: 112下学期刘宗德有开高等积体电路 可以去听听看 01/05 13:11