作者gecer (gecer)
看板Electronics
标题[问题] Dual edge triggered flip flop
时间Mon Nov 4 19:54:22 2019
https://hdlbits.01xz.net/wiki/Dualedge
在hdlbits上dual edge flip flop 小弟code 如下
module top_module (
input clk,
input d,
output q
);
wire invert_clk;
assign invert_clk=~clk;
always@(posedge clk or posedge invert_clk) begin
q<=d;
end
endmodule
但是得到的结果如下图 好像是 assign q=d 不用clock 触发
https://imgur.com/2ErzdfZ
已知解答是下列code 但是小弟不能理解为什麽上面code无法有flip flop的效果
module top_module (
input clk,
input d,
output q
);
reg q1, q2;
assign q = clk?q1:q2;
always @ (posedge clk)
begin
q1 <= d;
end
always @ (negedge clk)
begin
q2 <= d;
end
endmodule
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.121.18.119 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1572868466.A.CCD.html
※ 编辑: gecer (122.121.18.119 台湾), 11/04/2019 19:56:00
1F:→ samm3320: 你没有宣告q为reg,预设是wire所以就接一起了 11/04 21:35
2F:→ samm3320: dual edge trigger物理上需要两个dff跟一个mux实现 11/04 21:47
3F:→ samm3320: 下面的code写法会比较合理 11/04 21:48
module top_module (
input clk,
input d,
output reg q
);
wire invert_clk;
assign invert_clk=~clk;
always@(posedge clk or posedge invert_clk) begin
q<=d;
end
endmodule
我把q用 reg 宣告後 仍然是
https://imgur.com/2ErzdfZ
似乎只有下面的code可呈现 dual edge trigger
※ 编辑: gecer (122.121.18.119 台湾), 11/05/2019 08:35:17
4F:→ samm3320: 主要是你的code对电路来说不知道怎麽实现,要看tool怎 11/05 09:22
5F:→ samm3320: 麽理解你的code,目前看来他不知道怎麽办就直接接起来 11/05 09:22
6F:推 tkhan: 有双向的flip-flop吗?数位不及格 11/05 13:29
一样的code 我用 icarus verilog 模拟 便出现 flip flop 的功能
https://imgur.com/a/E0Fcusc
跟samm3320 大大说得符合 端看tool理解code的方式
※ 编辑: gecer (122.121.18.119 台湾), 11/05/2019 19:43:31
※ 编辑: gecer (122.121.18.119 台湾), 11/05/2019 19:44:15
7F:推 tkhan: 硬体描述语言,你真的懂硬体吗?.. 11/05 19:57
8F:→ samm3320: 不过你的写法不符合硬体的原理,建议你还是建立良好的 11/05 21:38
9F:→ samm3320: 习惯让code跟硬体连结,比较不会出事。 11/05 21:38