Verilog基础—HDLBits学习心得
文章平均质量分 70
HDLBits学习心得,记录学习过程。
日拱一卒_未来可期
不懂历史的FPGAer不是一个好厨子
展开
-
HDLBits答案汇总
前言该博客为本人做HDLBits习题时的心得记录总结,欢迎大家一起交流进步。HDLBits网站链接Verilog LanguageBasicsVectorsModules:HierarchyProceduresMore Verilog FeaturesCircuitsCombinational LogicBasic gatesMultiplexersArithmetic CircuitsKarnaugh Map to CircuitSequential LogicLatche原创 2021-02-18 22:38:10 · 95587 阅读 · 7 评论
-
HDLBits答案(25)_编写Testbench
Verification:Writing TestbenchesHDLBits链接前言今天更新HDLBits最后一章的习题:编写Testbench。题库Clock提供了如下描述的模块:module dut ( input clk ) ;要求传入频率为10ps的时钟,初始为0,如下图所示。Solution:module top_module (); reg clk; initial begin clk = 1'b0; end alw原创 2021-02-18 14:02:08 · 4245 阅读 · 9 评论 -
HDLBits答案(24)_由波形图描述电路
Build a circuit from a simulation waveformHDLBits链接前言今天更新HDLBits习题由波形图描述电路的部分,看图写代码。题库Combinational circuit 1由图可见,q=a&bSolution:module top_module ( input a, input b, output q );// assign q = a & b; // Fix meendmodule原创 2021-02-18 13:26:22 · 3123 阅读 · 4 评论 -
HDLBits答案(23)_找BUG
Finding bugs in codeHDLBits链接前言今天更新HDLBits习题部分找BUG部分,比较简单,大家看一下即可。题库8bit_2_1_Mux原Code:module top_module ( input sel, input [7:0] a, input [7:0] b, output out ); assign out = (~sel & a) | (sel & b);endmodule从上面的代码中原创 2021-02-16 14:25:48 · 3187 阅读 · 2 评论 -
HDLBits答案(22)_基于有限状态机的计数器
基于有限状态机的计数器HDLBits链接前言今天更新搭建更大的电路部分的习题,内容主要跟计数器和有限状态机有关。题库Counter with period 1000构造一个0-999的计数器,同步高电平复位。Solution:module top_module ( input clk, input reset, output [9:0] q); always @(posedge clk) begin if(reset) begin原创 2021-02-16 13:07:32 · 4548 阅读 · 9 评论 -
HDLBits答案(21)_Verilog有限状态机(8)
Verilog有限状态机(8)HDLBits链接前言今天继续更新状态机小节的习题。题库Q2a:FSM正宗的FSM题,没啥说的,看图写代码。Solution:module top_module ( input clk, input reset, // Synchronous active-high reset input w, output z); parameter A = 3'd0, B = 3'd1, C = 3'd2; pa原创 2021-02-08 15:21:14 · 2360 阅读 · 8 评论 -
HDLBits答案(20)_Verilog有限状态机(7)
Verilog有限状态机(7)HDLBits链接前言今天继续更新状态机小节的习题。题库Q3a:FSM题目里说当s为0时,进入B状态,然后会检查w的值,如果在接下来的三个周期中w值恰好有两个周期都为1,那么z输出1,否则z输出0。注意,由示例的波形图看应该是不重叠检测。Solutionmodule top_module ( input clk, input reset, // Synchronous reset input s, input w,原创 2021-02-08 10:37:29 · 3438 阅读 · 3 评论 -
HDLBits答案(19)_Verilog有限状态机(6)
Verilog有限状态机(6)HDLBits链接前言今天继续更新状态机小节的习题。题库Fsm hdlc同步帧检测涉及对数据的连续位流进行解码,以寻找指示帧(数据包)开始和结束的位模式。 6个连续的1(即01111110)是表示帧边界的“标志”。 为了避免数据流意外包含“标志”,发送方必须在接收方必须检测并丢弃的每5个连续的1秒后插入一个零。 如果连续7个或更多1,我们还需要发出错误信号。可以通过状态机来识别下面三种序列:0111110:表示5个1后面的0bit需被忽略;01111110原创 2021-02-07 18:38:29 · 4400 阅读 · 10 评论 -
HDLBits答案(18)_Verilog有限状态机(5)
Verilog有限状态机(5)HDLBits链接前言今天继续更新状态机小节的习题。题库题目描述1:第一道题目比较容易,题目中的in信号包含了一个起始位(0),8个数据位和一个停止位(1),开始in为1,也就是IDLE状态,当in为0时,进入START状态,然后经过8个周期,如果in为1,则进入STOP状态,接着如果in为0,进入第二轮START状态,否则进入IDLE状态。这里我用了很多个状态,实际上可以用计数器来代替中间的8个状态,这里是8个周期,如果是100个、200个周期,那么需要10原创 2021-02-07 14:48:17 · 5332 阅读 · 9 评论 -
HDLBits答案(17)_Verilog有限状态机(4)
Verilog有限状态机(4)HDLBits链接前言今天继续更新状态机小节的习题。题库题目描述1:One-hot FSM独热编码,根据状态转移图输出下一状态与结果。Solution1:module top_module( input in, input [9:0] state, output [9:0] next_state, output out1, output out2); parameter S0 = 4'd0;原创 2020-11-26 11:44:14 · 4905 阅读 · 8 评论 -
HDLBits答案(16)_Verilog有限状态机(3)
Verilog有限状态机(3)HDLBits链接前言今天继续更新状态机小节的习题,本章主要编写Lemmings Game部分。题库题目描述10:Game Lemmings1:有个小人左右走,它只有两种状态:向左走和向右走;左边碰到东西之后它就向右走,右边碰到东西之后它就向左走,两边都碰到东西就跟当前方向的反方向走;复位时小人向左走Solution10:module top_module( input clk, input areset, // Freshly br原创 2020-11-25 18:38:17 · 5416 阅读 · 8 评论 -
HDLBits答案(15)_Verilog有限状态机(2)
Verilog有限状态机(2)HDLBits链接前言继续更新状态机小节的习题。题库题目描述6:Solution6:module top_module( input in, input [3:0] state, output [3:0] next_state, output out); // parameter A=0, B=1, C=2, D=3; // State transition logic: Derive an equatio原创 2020-11-04 10:22:19 · 5976 阅读 · 4 评论 -
HDLBits答案(14)_Verilog有限状态机(1)
Verilog有限状态机(1)HDLBits链接前言今天来到了重要的部分:状态机。对该部分内容,可能不会一次更新一个小节;一方面是题目难度,另一方面是代码量过大;所以该节会分批更新,大家见谅。题库题目描述1:实现下图所示的摩尔状态机,复位为异步复位。Solution1:module top_module( input clk, input areset, // Asynchronous reset to state B input in, outp原创 2020-11-03 19:50:43 · 7880 阅读 · 12 评论 -
HDLBits答案(13)_Verilog移位寄存器附加题
Verilog移位寄存器HDLBits链接前言今天更新一节内容,该小节题目不多,共三道,但技巧性挺强。题库题目描述1:各单元的下一状态是此时当前单元相邻两位的异或。在这个电路中,创建一个512单元系统(q(511:0)),并在每个时钟周期中前进一个时间步长。加载(load)表明系统的状态应该加载data[511:0]至q中,假设边界(q[0]和q[512])都为零。Solution1:module top_module( input clk, input load,原创 2020-11-03 17:11:13 · 6556 阅读 · 6 评论 -
HDLBits答案(12)_Verilog移位寄存器
Verilog移位寄存器HDLBits链接前言今天更新一节寄存器相关内容,其中涉及CRC校验的内容是用线性反馈移位寄存器搭建而成的。题库题目描述1:构建一个4bit的移位寄存器(右移),含异步复位、同步加载和使能areset:让寄存器复位为0load:加载4bit数据到移位寄存器中,不移位ena:使能右移q:移位寄存器中的内容Solution1:module top_module( input clk, input areset, // async acti原创 2020-11-02 16:46:22 · 9157 阅读 · 4 评论 -
HDLBits答案(11)_Verilog计数器
Verilog计数器HDLBits链接前言今天更新一个小节内容:计数器。计数器可以说是我们接触数字电路以后用的最频繁的模块之一了,无论是项目、应聘还是将来的工作,计数器都无处不在。题库题目描述1:构建一个从0到15的4位二进制计数器,周期为16。同步复位,复位应该将计数器重置为0。Solution1:module top_module ( input clk, input reset, // Synchronous active-high reset原创 2020-10-10 20:34:03 · 11606 阅读 · 7 评论 -
HDLBits答案(10)_D触发器、同步与异步复位、脉冲边沿检测
D触发器、同步与异步复位、脉冲边沿检测HDLBits链接D触发器定义:D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,触发器具有两个稳定状态,即"0"和"1",在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。在这里解释边沿触发的D触发器,D触发器在时钟脉冲CP的前沿(正跳变0→1)发生翻转,触发器的次态(下一个状态)取决于CP的脉冲上升沿到来之前D端的状态,即次态Q=D。因此,它具有置0、置1两种功能。由于在CP=1期间电路具有维持阻塞作用(即触发器的输出不变),所以原创 2020-09-15 19:53:51 · 18125 阅读 · 7 评论 -
HDLBits答案(9)_卡诺图与最简SOP式
卡诺图与最简SOP式HDLBits链接真值表定义真值表是表征逻辑事件输入和输出之间全部可能状态的表格。以1表示真,0表示假。从真值表到标准式SOP标准式:找出真值表中所有输出为1的表项,按照输入的情况,为1用变量表示,为0则用反变量表示,得出若干乘积项,然后求和。POS标准式:找出真值表中所有输出为0的表项,按照输入的情况,为1用反变量表示,为0则用原变量表示,得出若干求和项,然后求积。举例说明有如下真值表ABCD000000100原创 2020-09-09 15:48:05 · 10219 阅读 · 11 评论 -
HDLBits答案(8)_Verilog半加器、全加器和行波进位加法器原理与设计
半加器、全加器和行波进位加法器原理与设计HDLBits链接半加器定义:半加器用于计算2个单比特二进制数a与b的和,输出结果sum(s)和进位carry(c)。在多比特数的计算中,进位c将作为下一相邻比特的加法运算中。其真值表如下所示。题目描述:实现一个半加器。半加器将两位比特相加(不带进位)并产生一个1bit结果和一个进位。Solution:module top_module( input a, b, output cout, sum ); assign {cou原创 2020-09-03 17:23:10 · 9762 阅读 · 3 评论 -
HDLBits答案(7)_Verilog多路选择器
Verilog多路选择器HDLBits链接定义多路选择器(Multiplexer)简称多路器,它是一个多输入、单输出的组合逻辑电路,在数字系统中有着广泛的应用。它可以根据地址码(选择码)的不同,从多个输入数据流中选取一个,让其输出到公共的输出端。部分练习题题目描述1:实现一个位宽为1的2-1的多路选择器。当sel=0,选择a,当sel=1,选择b。Solution1:module top_module( input a, b, sel, output out ); as原创 2020-09-01 11:53:26 · 8449 阅读 · 8 评论 -
HDLBits答案(6)_硬件模块设计的思考方式
硬件模块设计的思考方式HDLBits链接基本的逻辑门操作题目描述1:将输入端口in和输出端口out连接。Solution1:module top_module ( input in, output out); assign out = in;endmodule题目描述2:将输出out接地。Solution2:module top_module ( output out); assign out = 1'b0;endmodule题目描述3:实现或非门操原创 2020-08-31 21:20:58 · 10874 阅读 · 2 评论 -
HDLBits答案(5)_Generate实例化模块
Verilog的更多功能HDLBits链接三目运算符(形式:condition ? if_true : if_false)verilog中有跟c语言类似的三目运算符,这可以用于在一行中根据条件选择两个值中的一个,而不用在组合always块中使用if-then。下面给出一些示例:(0 ? 3 : 5) // This is 5 because the condition is false.(sel ? b : a) // A 2-to-1 multiplexer between a a原创 2020-08-30 11:10:21 · 11964 阅读 · 6 评论 -
HDLBits答案(4)_如何避免生成锁存器?
HDLBits_Verilog Language_ProceduresHDLBits链接组合逻辑的always块[David说]:考虑到硬件的可综合性,有两种always块是有意义的:组合:always @(*)时序:always @(posedge clk)组合逻辑的always块和assign赋值是等价的,使用哪一种完全看哪一种更方便。always块内可有更丰富的状态,如if-then,case等,但不能有连续赋值语句assign。如果在always块内指定了特定的信号,但没有的话原创 2020-08-29 16:55:34 · 11403 阅读 · 5 评论 -
HDLBits答案(3)_Verilog模块的例化与调用
HDLBits_Verilog模块的例化与调用HDLBits链接模块只要使用的所有模块都属于同一个项目,就可以通过在模块内部实例化一个模块来创建模块的层次结构。一个模块的代码不能在另一个模块的主体中编写(不同模块的代码不是嵌套的)。有两种常见的方式将wire信号连接到端口上,分别是按位置和按名称连接。按位置:mod_a instance1 ( wa, wb, wc );按名称:mod_a instance2 ( .out(wc), .in1(wa), .in2(wb) );By posit原创 2020-08-30 16:03:17 · 17881 阅读 · 2 评论 -
HDLBits答案(2)_Verilog向量基础
HDLBits_Verilog向量基础知识HDLBits链接向量在Verilog中,对向量维度的声明在向量名之前,这点与C语言有所差异,但使用向量的时候维度信息仍在向量名后。wire [99:0] my_vector; // Declare a 100-element vectorassign out = my_vector[10]; // Part-select one bit out of the vector向量的更多知识声明向量type [upper:lower] v原创 2020-08-30 11:59:24 · 10093 阅读 · 0 评论 -
HDLBits答案(1)_Verilog语法基础
HDLBits_Verilog语法基础线信号与物理电线不同,Verilog中的线信号(和其他信号)是“方向性的”。这意味着信息只向一个方向流动,从驱动程序流向接收器。在Verilog“连续赋值”(’ assign left_side = right_side; ')中,右侧信号的值被驱动到左侧的连接上。assign赋值是“连续的”,右侧的值发生变化时左边的值立马发生变化。这时我们就会理解:一个线信号不能有两个驱动程序来驱动;线信号如果没有驱动程序的话那么输出就是未知的。当存在多个assign语句时,原创 2020-08-30 11:25:42 · 11632 阅读 · 0 评论
分享