HDLBits 系列(15) 如何设计一个双边沿采样的电路?
目录
背景
原题复现
审题
我的设计1
我的设计2
背景
曾经专门写过这个话题,可是今天在练习HDLBits时候,又发现了这个问题,但是以前的思路我已经忘了,不得不回顾。
FPGA中如何实现双边沿采样?
奇怪的是我竟然之前用过的方法,今天我已经想不通为什么了?
直接见原题吧:
原题复现
You're familiar with flip-flops that are triggered on the positive edge of the clock, or negative edge of the clock. A dual-edge triggered flip-flop is triggered on both edges of the clock. However, FPGAs don't have dual-edge triggered flip-flops, and always @(posedge clk or negedge clk) is not accepted as a legal sensitivity list.
Build a circuit that functionally behaves like a dual-edge triggered flip-flop:
(Note: It's not necessarily perfectly equivalent: The output of flip-flops have no glitches, but a larger combinational circuit that emulates this behaviour might. But we'll ignore this detail here.)
审题
(注意:它不一定完全等效:触发器的输出没有毛刺,但是可以模仿这种行为的较大的组合电路。但是在这里我们将忽略此细节。)
上面注意的意思是可以接受毛刺。
我还是说一下自己的思路吧,本身最容易想到的方法应该是:
always@(posedge clk or negedge clk) beginq <= d;
end
但是由于不存在这样的触发器,所以编译器是过不去的,不能这样做。
那这样呢?
always@(posedge clk) beginq <= d;
endalways@(negedge clk) beginq <= d;
end
这不是废话吗?这和上面的写法没什么区别?属于掩耳盗铃。
对时钟做文章:
assign clk_gen = ~clk;
always@(posedge clk) beginq <= d;endalways@(posedge clk_gen) beginq <= d;
end
综合工具不能综合,同样属于掩耳盗铃之举动。
生成的时钟clk_gen和clk直接相关,然后对同一个reg变量进行赋值,无异于同一个时钟上下边沿进行赋值。
那我们对reg变量动手,用不同的reg变量代表输出,之后进行逻辑运算。
我的设计1
给出一种可行的方案:
module top_module (input clk,input d,output q
);reg p = 0, n = 0;always@(posedge clk) beginn <= d;
endalways@(negedge clk ) beginp <= d;
endassign q = clk ? n : p;endmodule
我的设计2
最后还有一种可行的方案:
module TwoEdge(input clk,input rst_n,input d,input out);reg p = 0, n = 0;always@(posedge clk) begin p <= d ^ n;
endalways@(negedge clk ) beginn <= d ^ p;endassign out = p ^n;endmodule
但此刻我心力交瘁,竟想不出为什么了?
2019年11月24(周日),21:57(这个日子过后,我将又是一个状态)。
HDLBits 系列(15) 如何设计一个双边沿采样的电路?相关推荐
- 生物信息学:任选一种编程语言,设计一个双序列全局比对的程序
任选一种编程语言,设计一个双序列全局比对的程序.要求: 1) 输入两条蛋白质序列,输出比对结果例如: Alignment Score: 12345 E E E E E K K K K K A A A ...
- FPGA中如何实现双边沿采样?
昨天和同学讨论双边沿采样的方法,包括DDR是如何实现的呢? 首先肯定不能在一个always块内用一个时钟的上下边沿,如下: always@(posedge clk or negedge clk) be ...
- verilog设计一个分,秒定时器电路:输入时钟1KHZ进行分秒计数
verilog设计一个分,秒定时器电路:输入时钟1KHZ进行分秒计数 目标 实现分秒计数 问题分析 首先要求1KHZ的时钟,周期为1*10e-3s,达成1秒需要1000个周期,因为没有提到占空比就偷懒 ...
- C语言八位彩灯循环左移,利用计数器和移位寄存器设计一个八个彩灯循环电路?...
3 工作原理 3.1 系统方案 3.11 方案一 彩灯控制器电原理图如下图所示.ICl.IC2由555接成多谐振荡器.IC3由4位2进制计数器74LS93接成16进制计数器,其4个输出端可分别输出对计 ...
- 用jk触发器构成二分频电路_如何用下沿触发JK触发器设计一个同步二,四分频电路?...
展开全部 沿触发的JK触发器设计一同32313133353236313431303231363533e78988e69d8331333431353962步时序电路,其状态图如下图所示,要求电路使用的门 ...
- HDLBits 系列(0)专题目录
本篇博文是近来总结HDLBits系列的目录,点击蓝色字体即可进入查看具体内容. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行 HDLBits 系列(2)如何避免生成锁存器? ...
- 组合逻辑电路的设计(二) -- 五路输入呼叫显示电路和两个BCD8421码的加法运算电路
一.实验任务及要求 1. 设计要求(2题任选1题,鼓励2题都做) (1) 设计一个五路输入呼叫显示电路,5个数码开关分别模拟用户的输入信号,用户优先权按用户编号依次递减,即1号的优先权最高,5号最低: ...
- HDLBits 系列(18) BCD码计数器的设计
目录 原题复现 审题 我的设计 原题复现 先给出原题: Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit i ...
- 消息中间件系列(七):如何从0到1设计一个消息队列中间件
消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...
最新文章
- linux oracle 远程exp_linux单独安装oracle客户端及exp/imp工具配置
- 如何通过IP定位交换机
- Dapr + .NET Core实战(三)状态管理
- Servlet读取文件的最好的方式
- 【C++深度剖析教程10】C++中的字符串类
- 利用python读取栅格数据
- Mybatis源码之缓存模块分析
- 拳王虚拟项目公社:闲鱼知乎引流售卖虚拟资源的虚拟副业项目实操
- Pytorch损失函数BCELoss,BCEWithLogitsLoss
- [转]C#中水晶报表实例
- android.mk 编译选项,Android.mk中加入选项,编译生成可以直接安装的apk包
- 极简网关认证方案:诞生于国科大的“认证博士”
- 一天一个小算法——最小生成树(kru Prm)
- 自定义控件解决android中TextView中英文换行问题
- curl http header_利用Linux命令cURL实现文件定时上传到ftp服务器的小程序,实用
- Solidity介绍
- 洛谷 P3469 [POI2008]BLO-Blockade
- 12星座的出生年月日性格_出生年月与星座对照表
- 神级程序员教你用代码哄好生气的女朋友,网友:我要甜甜的恋爱!
- n平方的求和公式_n的二次方怎么求和?
热门文章
- 大四可以正式入职吗_三方协议一签,就不是应届生了吗?高校毕业生注意,别错失身份...
- python3 矩阵运算_3.10 矩阵与线性代数运算
- mybatis 大于小于转义_10 HTML5特性、转义字符和注释
- 弹出层,div的写法
- java线程饥饿死锁_java并发-线程饥饿死锁测试
- java 对象怎么序列化,java对象序列化总结
- java gui 窗口 传值_java – GUI – 在不同窗口之间传输数据(J...
- linux 树莓派查看ip,树莓派 常用Linux命令
- 关于举办第十七届全国大学生智能汽车竞赛的通知-加盖公章
- 智能车竞赛技术报告 | 智能车视觉 - 上海大学 - 猫耳麻花