
牛客
文章平均质量分 63
不想上体育课
啥,还不开饭?
展开
-
异步fifo的实现
异步FIFO的实现以及拓展的一些问题原创 2022-07-23 19:05:15 · 910 阅读 · 0 评论 -
verilog实现计算最大公约数和最小公倍数
设计一个时序电路,输入2个无符号数,位宽可以通过参数DATA_W确定,输出这两个数的最小公倍数和最大公约数。解:在求解最大公约数与最小公倍数时,通常使用辗转相除法计算得到最大公约数,然后利用两数之积除最大公约数得到最小公倍数;举例如下:34 与 20;(1)34 - 20 = 14;(2)20 - 14 = 6;(3)14 - 6 = 8;(4)8 - 6 =2;(5)6 - 2 = 4;(6)4 - 2 = 2;(7)2 - 2 = 0;所以最大公约数为2;则最小公倍数 = 34 * 20 /2 =340原创 2022-06-17 23:05:58 · 1573 阅读 · 7 评论 -
具有倍数关系的时钟切换
下图显示了防止源时钟相互倍数的时钟开关输出出现毛刺的解决方案。在每个时钟源的选择路径中插入一个负边沿触发的D触发器。 在时钟的下降沿采样选择控制(SELECT),以及仅在首先使其他时钟无效后使能选择(SELECT),可以提供出色的输出保护 :下面简单的解释下这个电路:当SELECT为0时,明显CLK1的那部分通路到输出无效,仅仅看下半部分电路即可,在CLK0的下降沿采样SELECT(取反后)信号,与CLK0相与之后输出;当SELECT为1时,同理上半部分电路有效;需要重点分析的是当SELEC..原创 2022-05-23 22:55:53 · 510 阅读 · 1 评论 -
可配置位宽的流水线乘法器
1.前言:关键词:流水线,乘法器硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。但是当数据串行输入时,指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期内执行完毕,如果每次输入的串行数据都需要等待上一次计算执行完毕后才能开启下一次的计算,那效率是相当低的。流水线就是解决多周期下串行数据计算效率低的问题。2.什么是流水线流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法原创 2022-05-03 16:29:16 · 828 阅读 · 4 评论 -
单端口RAM的实现以及 generate... for...语句
来自牛客的题:由于本人知识尚浅,只是想记录一下自己的刷题过程中遇到的问题以及想法,也行存在不对的地方,欢迎各位大佬指正;在此之前,我也会偶尔用到RAM,但并不清楚怎么设计它,如今好像明白了点;在RAM模块中,我们会定义一个寄存器,通过这个寄存器对读写数据进行处理,在这道题中,我们需要设计一个位宽为4,深度为128的单端口RAM;首先,我们定义一个存储器mem:前面的[3:0]指数据位宽,后面的[127:0]指数据深度,即存储的数据量;但是数据量太多,我们不可能一一赋值,因此,我.原创 2022-05-01 10:31:36 · 536 阅读 · 0 评论 -
脉冲同步电路
题目:跨时钟域提取一个单时钟周期宽度脉冲(从快到慢)我们可以利用一个过程值记录快时钟域下脉冲的次数,如图,当data_in == 1'b1时,令in_flag取反,如下所示通过in_flag的值来产生data_reg,如下所示,这里我们利用了移位的方式来为data_reg赋值;最后利用组合逻辑进行高两位异或赋值;波形图如下:完整代码:`timescale 1ns/1nsmodule pulse_detect(input clk_fast ,in...原创 2022-04-29 14:08:04 · 339 阅读 · 0 评论 -
实现同步FIFO,FIFO的位宽和深度可配置。
同步fifo的设计比异步fifo简单,不需要进行跨时钟域处理,主要难点在于空、满信号的判断;首先,我们需要先了解一下fifo的读写:可以通俗的理解为装水与取水,wr_addr便是向罐子里装水,而rd_addr便是取水,如果wr_addr的速度大于rd_addr速度,则一段时间后罐子便会装满,即fifo写满,反之,fifo读空,一般而言,装水与取水不同时进行,当罐子装满后,full信号拉高,通知rd_addr进行取水,当罐子里没水后,empty信号拉高,在装水;现在是如何判断空,满呢,我们可以..原创 2022-04-28 16:15:14 · 2260 阅读 · 3 评论