![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HDL专栏
用于训练相关基础电路
qq_42282258
这个作者很懒,什么都没留下…
展开
-
HDLBits 写测试平台系列
首先一个测试模块 需要将时间单位定义下来:`timescale 1ps/1ps 第一个1ps代表 时间单位为ps 第二个1ps代表时间精度为1ps一般来说,输入类型写为reg输出类型写为 wire然后要将相应的DUT模块进行例化(将tb里面的输入和输出以及定义的中间变量传递进去)。最后 利用一个initial begin end 过程块来进行对输入在不同时刻进行不同的赋值如果需要用到时钟的话,就利用 always # xx clk = ~clk ;这里也可以用initial beginc原创 2022-06-09 11:12:40 · 324 阅读 · 0 评论 -
HDLBits Bulid a circuit from a simulation wavefrom 系列
以下博客分析格式和部分代码参考学习:HDLBits 系列(41)根据仿真波形来设计电路之组合逻辑题目链接直接画出相应的卡诺图Sim/circuit5原题链接根据波形图,就可以看出,这个可以利用case 语句来判断选择那个作为输出。............原创 2022-06-08 14:32:04 · 187 阅读 · 0 评论 -
HDLBits Bugs addsubz
Bugs addsubz这道题其实主要是由于if语句而引起的锁存器现象,加上else语句即可。原创 2022-06-08 10:34:22 · 289 阅读 · 0 评论 -
HDLBits Bugs mux4
Bugs mux4首先仿真跑一遍:会发现时序图:分析:1.当sel2’b00的时候,会发现选择的是aa,当sel2’b01的时候,会发现选择的是bb。当sel2‘b10的时候,选择的是cc,因此,可以判断出sel[1]是作为最终输出选择。当sel[1]等于0的时候,将是在输入a和b中选择,因此a和b处于同一个二路选择器当中,c和d处于同一个选择器。而且sel[0]0的时候,选择的是输入a,为1的时候选择的输入b。当sel2’b11的时候,发现选择的是dd,而当sel2’b10时候,选择的是cc,原创 2022-06-08 10:17:28 · 455 阅读 · 0 评论 -
HDLBits Exams/review2015 fancytimer
Exams/review2015 fancytimer历时2个小时,终于把这道题给弄得差不多了,但是还是有一些细节没弄明白,特此记录一下。根据题意得要求 可以大概划分为以下几个电路:1.序列检测模块2.移位断定延迟时间模块3.计数器模块4.检测ack模块如果刷过HDLBits 就可以知道这道题得前面几道题,其实对应的就是这几个小模块电路因此,参考前面几个模块电路,可以给出如下代码:其中S1,S11,S110状态是处于序列检测,B0,B1,B2,B3是处于4个时钟周期内用来断定延迟时间的状态原创 2022-06-08 08:50:49 · 277 阅读 · 0 评论 -
HDLBits Exams/review2015 fsmshift
Exams/review2015 fsmshift画出相应的状态图,便可得到相应的代码:参考博客:Exams/review2015 fsmshift原创 2022-06-07 09:30:34 · 131 阅读 · 0 评论 -
HDLBits Exams/2013 q2bfsm
Exams/2013 q2bfsm原创 2022-06-01 15:35:14 · 385 阅读 · 0 评论 -
HDLBits Exams/2014 q3fsm
1.原题复现题目链接:Exams/2014 q3fsm2.思路和代码根据题意,可以分为两个部分,第一部分为状态机,包括A和B。第二部分为在状态B的时候,需要对另外一个输入进行计数,且三个时钟周期为一循环。因此,第二部分可以细分为:1.需要一个couter用来对三个周期内的输入w进行计数 2.需要一个counter用来对时钟周期次数进行计数,且每记三次后,重新归1开始计数。刚开始的思路是用的for循环,后来发现不对,因为在一个时钟上升沿里面,for循环3次是不合题意的,题目要求的是在三个时钟周期内计数原创 2022-05-31 14:56:03 · 227 阅读 · 0 评论 -
HDLBits Exams/ece241 2014 q5a
1.原题复现题目链接:https://hdlbits.01xz.net/wiki/Exams/ece241_2014_q5a2.思路以及代码本题刚开始卡了很久没有思路,对于具体的将状态机运用到一些具体例子上的逻辑思维还是比较欠缺的。最后,通过看别人的博客,终于弄明白了本题的要求:首先还是复习一下补码的规则:1.正数下,补码就是原码2.在负数时候,补码是由负数的原码取反之后+1获得(可以理解为:从低位到高位(不包括最高位),当遇到第一个1之后,其余的高位全部取反,最后再加上最高位1)比如说:原创 2022-05-31 10:48:34 · 1102 阅读 · 2 评论 -
HDLBits Exams/ece241 2013 q8
1.原题复现Exams/ece241 2013 q82.解题思路可以看出题目本身还是比较简单的,但是要注意的是这题的要求是利用Meanly来做,当然通过这道题,也要寻找出Meanly和Moore的类型的不同。利用Meanly思路来解题:Meanly的输出的明显特点就是:输出不仅与当前的状态有关,而且也会受到当前输入的影响。如下图的上方状态图所示:在本题中,当z=1的时候,要求为当前状态为s2而且满足同时x=1。同时也可以看出,相比Moore思路来写的话,将会少一个状态S3。给出相应的代码原创 2022-05-30 15:05:40 · 422 阅读 · 0 评论 -
VCS和verdi操作知识点记录
1.在makefile当中使用 VCS进行编译时候,目录下面是没有创建 worklib的 会出现如下图所示错误:解决方案:在相应的makefile目录下,创建一个setup使用如下命令:gvim synopsys_sim.setup来创建一个相应的work当然,在该文件夹里面需要再输入如下内容,才能成功进行编译--VCS MX setup file for ASIC--Mapping default work directoryWORK > DEFAULTDEFAULT : ./原创 2022-05-29 22:10:04 · 337 阅读 · 0 评论 -
HDLbits Fsm hdlc
原题复现代码刚开始的错误思路是,把IDLE状态设置为输入为0时候的初始状态,结果发现这样做是不可行的,原因很简单:假设IDLE状态是初始状态,根据题意,复位后的初始状态即是0,并不是依靠in输入0来判断作为初始位,也是以第一个1作为起始位来进行判断。也就是说,本身是不需要判断in是否为0,从而进入连续读取状态的。因为给出了默认值就是0,直接判断in是否为1,从而决定是否进入下一个状态。错误思路想法1: 换句话说,不需要判断in为1的上一个节拍的in输入是否为0,我们只是要求判断出连续的5个1或者6原创 2022-05-29 11:44:09 · 125 阅读 · 0 评论 -
HDLBit 之 Fsm serialdp
1.原题复现代码思考过程首先,可以根据上一题比较而言,这一题不过是多了一个校验位(这里要注意的是:这个校验位在停止位之前,校验位和停止位是分开的两个不同的bit,刚开始没写出来,就是因为这里没弄清楚)上一题的题目见蓝色部分点击进入https://hdlbits.01xz.net/wiki/Fsm_serialdata然后贴上该题的串行数据代码:module top_module( input clk, input in, input reset, // Synch原创 2022-05-28 17:03:52 · 290 阅读 · 0 评论 -
HDL Fsm onehot
1.原题复现https://hdlbits.01xz.net/wiki/Fsm_onehot2.代码刚开始采用的是独热码形式的程序来进行测试,结果发现不行:经过仿真提示之后,才发现测试原来并非以一位的独热码形式来进行的,因此我们应该寻找另一种办法经过在网上寻找之后,才发现题目的是意思是,并非每次输入当中,只有一位为高电平,也有可能是两位的独热码或者其他一些自由的输入,因此,采用参数定义独热码形式是不可行的。同时,也不能采用case语句,因为输入情况千变万化,无法列写完全。因此,提出的方法是原创 2022-05-26 14:51:04 · 126 阅读 · 0 评论 -
HDL Count clock
1原题复现2.代码module top_module( input clk, input reset, input ena, output pm, output [7:0] hh, output [7:0] mm, output [7:0] ss); reg [3:0] ss_gewei=0; reg [3:0] ss_shiwei=0; reg [3:0] mm_gewei=0; reg [原创 2022-05-23 08:50:08 · 124 阅读 · 0 评论 -
HDL Dualedge
1.原题复现2.代码自己的做法:但经过查询对比之后,发现这样做会有一个毛刺(gitch)的问题存在,至于为什么会出现毛刺:可以参考该篇博客FPGA中如何实现双边沿采样? 因此,给出了第二种代码做法:补充一下异或的用法:1.两个相同的数字异或结果为02.如果其中一个数为0,那么结果将会是另外一个数。相关的参考博客为:verilog实现双边沿触发器Dual-edge triggered flip-flop...原创 2022-05-20 10:18:38 · 116 阅读 · 0 评论 -
HDL Edgedetect 和Edgedetect2
1原题复现2.代码第一种方法:上述代码在ISE仿真软件中生成的RTL Schematic为:第二种方法生成的RTL Schematic 图:总结:可见不同的代码,将会生成不同的RTL原理图原创 2022-05-17 15:10:18 · 160 阅读 · 0 评论 -
HDL Exams/ece241 2014 q4
1.原题复现2.代码3. 本题所需注意点:刚开始的时候没做出来,参考网上的答案后,发现是自己没注意到题目的细节 :从这句话可以得出,在开始前,所有的Q输出值都被初始化为0了。换句话说,此时Z的输出值经过或非门后,初始化为1;那么怎么对变量进行初始化赋值呢?我们可以使用inital语句来对一些变量进行初始化赋值比如initial z =1;根据题目: 我们需要生成三个寄存器 代码如图所示关于z 的赋值:...原创 2022-05-17 11:49:11 · 185 阅读 · 0 评论 -
HDL Dff16e
1.原题复现2.第一次错误代码1.2.得出的时序图经过:Synchronous active-low reset 的分析。发现这是一个同步的时序,而自己错把复位当作是异步复位,因此,导致在时序变化上,自己输出的值与参考值有突出。正确做法是去掉图片中的异步复位。...原创 2022-05-17 09:20:42 · 102 阅读 · 0 评论 -
HDL Alwaysblock2(关于组合与时序 阻塞与非阻塞 HDL中给出的解释说明)
1.原题复现可总结如下:1.always@(*)代表是组合逻辑2.always@(posedge clk)代表的是时序逻辑3.assign 只能用于非always块内4.在一个组合逻辑always块中,使用阻塞语句5.在一个时序逻辑always块中,使用非阻塞语句...原创 2022-05-16 21:01:35 · 162 阅读 · 0 评论 -
HDL Exams/ece241 2013 q2
部分参考内容来自于:https://blog.csdn.net/weixin_44884357/article/details/1068071781.原题复现题目中的SOP代表的意思:sum of production 积之和 POS 和之积2.解题3.知识点学习关于积之和 与和之积的表达形式怎么求解:1.积之和:积之和的求法:可以根据卡诺图,按照2个,4个,8个等形式的最小项之和来进行化简,同时可以配合任意项的合理使用。2.和之积:和之积的求法:和之积的求法一般要求利用摩根定理原创 2022-05-14 10:46:52 · 438 阅读 · 0 评论 -
HDL Bcdadd4 (包括对generate endgenerate语法的复习)
1原题复现2解题通过学习他人的博客之后,了解到本题的考察点是关于generate endgenerate 用来例化模块的语法知识点:重新复习一下generate的循环语法:1.在使用generate循环语法时候,必须现在genvar中声明循环中所使用到的索引变量名,然后才能使用generate块。 因为genvar声明的索引变量被利用作为整数在generate中来判断循环 一般将genvar声明放在generate过程块的外部区域,并且相同的循环索引变量可以在多个generate中使用。代码原创 2022-05-13 12:05:13 · 232 阅读 · 0 评论 -
HDL Exams/ece241 2014 q1c
1.原题复现2.解题题目是要求是下:有两个二进制补码的向量的情况下,判断出他们在相加减情况下的溢出情况。什么情况下才会溢出呢? 正数+正数=负数(正数-负数相当于正数+正数) 负数加负数=正数(负数-正数相当于负数加负数) (减法是可以转化为加法的) 所以判断方法可以为...原创 2022-05-13 10:54:38 · 53 阅读 · 0 评论 -
HDL刷题 Exams/m2014 q4j
1.原题补充:Ripple carry adder :行波进位加法器 又称为逐位进位加法器2.解答方法1:当时拿着这道题,就想到的是利用 直接相加的方法来做本质上是因为verilog中,如果 x+y产生了进位,那么verilog的语法会自动将x+y扩展成5位数。方法2:利用生成块方法:需要注意的地方:生成块里面的generate endgenerate中的begin end 必须要使用一个名称来称呼在网上看到的其他方法:1.采用实例化模块的方式进行的: module top_原创 2022-05-13 10:41:33 · 270 阅读 · 0 评论