牛客刷题
文章平均质量分 58
锅巴不加盐
一天学一点
展开
-
牛客网Veirlog刷题答案目录(持续更新)
牛客刷题答案目录,仅为个人做题笔记!!原创 2023-04-25 10:39:45 · 1455 阅读 · 0 评论 -
牛客网Verilog刷题——VL56
实现4bit无符号数流水线乘法器设计。原创 2023-08-01 08:47:33 · 1087 阅读 · 0 评论 -
牛客网Verilog刷题——VL55
【代码】牛客网Verilog刷题——VL55。原创 2023-08-01 08:47:02 · 951 阅读 · 0 评论 -
牛客网Verilog刷题——VL54
当写数据指示信号write_en有效时,通过写地址信号write_addr 和写数据write_data,向对应位置写入相应的数据。在题目中,并未指出数据的读写操作是同步的还是异步的,从题目中给出的时序图看,题目要求在读使能有效的该时钟内读出数据,比如在读使能read_en有效时,地址为0,立刻读出地址0中的数据1,地址为1,则立刻读出地址1中的数据2,可见时序图要求的是异步读,但是在程序中,我们设置为同步读,仿真也是通过的(个人觉得题目有问题,没有指出读写是同步还是异步,仿真也有问题)。原创 2023-08-01 08:46:29 · 749 阅读 · 0 评论 -
牛客网Verilog刷题——VL53
根据读地址的位宽(为7),我们可以知道该单端口RAM的深度为128,所以该RAM是一个宽度为4,深度为128的单端口RAM。需要注意的是:该RAM非写即读,即enb=1,则为写操作;enb=0,则为读操作。设计一个单端口RAM,它有: 写接口,读接口,地址接口,时钟接口和复位;存储宽度是4位,深度128。注意rst为低电平复位。模块的接口示意图如下。原创 2023-08-01 08:45:55 · 782 阅读 · 0 评论 -
牛客网Verilog刷题——VL52
请编写一个十进制计数器模块,当mode信号为1,计数器输出信号递增,当mode信号为0,计数器输出信号递减。每次到达0,给出指示信号zero。原创 2023-08-01 08:45:08 · 839 阅读 · 0 评论 -
牛客网Verilog刷题——VL50
请编写一个模块,实现简易秒表的功能:具有两个输出,当输出端口second从1-60循环计数,每当second计数到60,输出端口minute加一,一直到minute=60,暂停计数。在这里需要注意的是:second在复位时是0,也就是说第一个minute的计数是从0计数到60,而后面second计数到60后,再进行计数时,是从1计数到60。原创 2023-07-31 10:47:17 · 287 阅读 · 0 评论 -
牛客网Verilog刷题——VL49
由于快时钟域clk_fast的时钟频率大于慢时钟域clk_slow的时钟频率,快时钟域的脉冲信号可能无法被慢时钟域采样到,因此需要把快时钟域clk_fast的脉冲信号进行展宽,然后再将展宽后的快时钟域下的脉冲信号用“打两拍”的方法同步到慢时钟域,这里存在一个问题:快时钟域的脉冲信号展宽要展宽为几个时钟宽度?(2)将展宽后的快时钟域脉冲信号signal_pulse_fast_extend同步到慢时钟域clk_slow(打两拍),得到signal_pulse_fast_extend_f2s_2;原创 2023-07-31 10:45:05 · 363 阅读 · 0 评论 -
牛客网Verilog刷题——VL48
本题考察的就是多比特跨时钟域处理,但是题目中没有指出是快时钟域到慢时钟域还是慢时钟域到快时钟域,只是明确指出data_en至少保持3个clk_b时钟周期,data_in至少保持10个clk_b时钟周期,也就是说,时钟域clk_a下的信号同步到时钟域clk_b下,在clk_b的上升沿处,肯定能被采集到,不会出现像我们常见的快时钟域到慢时钟域处理中,出现的慢时钟域采集不到快时钟域信号的情况,所以本题只需要简单的将单比特的使能信号进行跨时钟域处理后,再作为多比特跨时钟域处理打拍中的使能信号即可。原创 2023-07-31 10:43:50 · 733 阅读 · 0 评论 -
牛客网Verilog刷题——VL47
注意:牛客中很多题目与答案不符,本题要求设计一个格雷码计数器,没有说明具体设计要求。实际上本题的设计要求是:初始化格雷码计数器输出为0值,然后将格雷码转为二进制码,然后二进制码计数器加以后再转为格雷码进行输出,要求格雷码计数器输出两个时钟周期发生一次变化。所以格雷码计数器设计中应该包含三个部分:格雷码转二进制、二进制计数器、二进制转格雷码。实现4bit位宽的格雷码计数器。原创 2023-07-31 10:01:44 · 628 阅读 · 0 评论 -
牛客网Verilog刷题——VL46
同步FIFO中,读操作与写操作均在同一时钟域下进行,不涉及跨时钟域操作,所以只需要用一个计数器来计数当前FIFO中存储的实际数据个数(写入数据个数减去读出数据个数),再用于判断产生空满信号即可。根据题目提供的双口RAM代码和接口描述,实现同步FIFO,要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。双口RAM代码如下,可在本题答案中添加并例化此代码。原创 2023-07-31 08:52:38 · 675 阅读 · 0 评论 -
牛客网Verilog刷题——VL45
异步FIFO设计中,一般分别设计一个读地址指针与写地址指针,用于判断当前FIFO的空满。由于读操作与写操作不再同一时钟域下,所以需要做跨时钟域处理,而读地址指针与写地址指针是多比特信号,跨时钟域处理一般转为格雷码后再进行跨时钟域传输,这是由于格雷码形式的地址指针每次加1时,只有1比特发生改变,这样就转换为单比特跨时钟域处理的问题,单比特跨时钟域处理可以用打两拍的方式进行处理。请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。原创 2023-07-31 08:18:05 · 358 阅读 · 0 评论 -
牛客网Verilog刷题——VL44
如图所示为两种状态机中的一种,请根据状态转移图写出代码,状态转移线上的0/0等表示的意思是过程中data/flag的值。两段式状态机中,现态curr_state与次态next_state均为寄存器类型变量,现态curr_state()用组合逻辑,表示下一个状态;而数据的输出也是使用组合逻辑,这也是和三段式状态机的区别之处。)用时序逻辑,表示当前状态;次态next_state(1、 必须使用对应类型的状态机。2、 使用二段式描述方法。注意rst为低电平复位。原创 2023-07-31 08:14:18 · 296 阅读 · 0 评论 -
牛客网Verilog刷题——VL43
如图所示为两种状态机中的一种,请根据状态转移图写出代码,状态转移线上的0/0等表示的意思是过程中data/flag的值。三段式状态机中,现态curr_state与次态next_state均为寄存器类型变量,现态curr_state(2、 使用三段式描述方法,输出判断要求要用到对现态的判断。)用时序逻辑,表示当前状态;次态next_state(用时序逻辑,输出一些使用状态机控制的数据等。1、 必须使用对应类型的状态机。)用组合逻辑,表示下一个状态;注意rst为低电平复位。原创 2023-07-31 08:12:55 · 303 阅读 · 0 评论 -
牛客网Verilog刷题——VL42
请设计一个可以实现任意小数分频的时钟分频器,比如说8.7分频的时钟信号,注意rst为低电平复位。提示:其实本质上是一个简单的数学问题,即如何使用最小公倍数得到时钟周期的分别频比。设小数为n,此处以8.7倍分频的时钟周期为例。首先,由于不能在硬件上进行小数的运算(比如2.1个时钟这种是不现实的,也不存在3.3个寄存器),小数分频不能做到分频后每个时钟周期都是源时钟的n倍,也无法实现占空比为1/2,因此,考虑小数分频,其实现方式应当为53个clk——out时钟周期是10个clkin时钟周期的8.7倍。原创 2023-07-31 08:11:40 · 765 阅读 · 0 评论 -
牛客网Verilog刷题——VL41
请设计一个可以实现任意小数分频的时钟分频器,比如说8.7分频的时钟信号,注意rst为低电平复位。提示:其实本质上是一个简单的数学问题,即如何使用最小公倍数得到时钟周期的分别频比。设小数为n,此处以8.7倍分频的时钟周期为例。首先,由于不能在硬件上进行小数的运算(比如2.1个时钟这种是不现实的,也不存在3.3个寄存器),小数分频不能做到分频后每个时钟周期都是源时钟的n倍,也无法实现占空比为1/2,因此,考虑小数分频,其实现方式应当为53个clk——out时钟周期是10个clkin时钟周期的8.7倍。原创 2023-07-31 07:40:25 · 668 阅读 · 0 评论 -
牛客网Verilog刷题——VL40
设计一个同时输出7分频的时钟分频器,占空比要求为50%。注意rst为低电平复位。原创 2023-07-04 17:08:33 · 362 阅读 · 0 评论 -
牛客网Verilog刷题——VL39
设计一个自动贩售机,输入货币有两种,为0.5/1元,饮料价格是1.5/2.5元,要求进行找零,找零只会支付0.5元。1、投入的货币会自动经过边沿检测并输出一个在时钟上升沿到1,在下降沿到0的脉冲信号。2、此题忽略出饮料后才能切换饮料的问题。注意rst为低电平复位。原创 2023-07-04 17:02:08 · 899 阅读 · 0 评论 -
牛客网Verilog刷题——VL51
请编写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号zero,当置位信号set 有效时,将当前输出置为输入的数值set_num。原创 2023-08-01 08:44:41 · 1449 阅读 · 0 评论 -
牛客网Verilog刷题——VL38
设计一个自动贩售机,输入货币有三种,为0.5/1/2元,饮料价格是1.5元,要求进行找零,找零只会支付0.5元。需要注意的是,投入的货币会自动经过边沿检测并输出一个在时钟上升沿到1,在下降沿到0的脉冲信号,其中rst为低电平复位。原创 2023-04-26 21:04:53 · 213 阅读 · 0 评论 -
牛客网Verilog刷题——VL37
请使用D触发器设计一个同时输出2/4/8分频的50%占空比的时钟分频器,注意rst为低电平复位。原创 2023-04-26 20:56:28 · 246 阅读 · 0 评论 -
牛客网Verilog刷题——VL36
在题目中,要求使用状态机设计,也可以使用移位寄存器设计,下面我们分别给出了使用状态机进行序列检测与使用移位寄存器进行序列检测的代码。1、进行重叠检测 即10110111 会被检测通过2次。2、寄存器输出,在序列检测完成下一拍输出检测有效。注意rst为低电平复位。原创 2023-04-26 20:51:13 · 169 阅读 · 0 评论 -
牛客网Verilog刷题——VL35
(1)进行非重叠检测 即101110111 只会被检测通过一次;注意rst为低电平复位,信号示意图如下。(2)寄存器输出且同步输出结果;原创 2023-04-26 16:29:41 · 164 阅读 · 0 评论 -
牛客网Verilog刷题——VL34
电路的接口如下图所示。valid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;rst_n是异步复位信号。实现数据位宽转换电路,实现8bit数据输入转换为16bit数据输出。其中,先到的8bit数据应置于输出16bit的高8位。接口时序示意图如下。原创 2023-04-26 16:23:03 · 194 阅读 · 0 评论 -
牛客网Verilog刷题——VL33
在这里,输入数据的位宽是24比特,而输出数据的位宽是128比特,不是输入数据的整数倍,那么就需要计算输入数据位宽和输出数据位宽的最小公倍数,24与128的最小公倍数为384,也就是说每输入16个数据,为一轮,就可以产生3个完整的128比特输出,如下图所示。电路的接口如下图所示。valid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;实现数据位宽转换电路,实现8bit数据输入转换为12bit数据输出。其中,先到的数据应置于输出的高bit位。原创 2023-04-26 16:19:12 · 208 阅读 · 0 评论 -
牛客网Verilog刷题——VL32
在这里,输入数据的位宽是24比特,而输出数据的位宽是128比特,不是输入数据的整数倍,那么就需要计算输入数据位宽和输出数据位宽的最小公倍数,24与128的最小公倍数为384,也就是说每输入16个数据,为一轮,就可以产生3个完整的128比特输出,如下图所示。电路的接口如下图所示。valid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;实现数据位宽转换电路,实现24bit数据输入转换为128bit数据输出。其中,先到的数据应置于输出的高bit位。原创 2023-04-26 16:16:40 · 269 阅读 · 0 评论 -
牛客网Verilog刷题——VL31
电路的接口如下图所示。valid_a用来指示数据输入data_in的有效性,valid_b用来指示数据输出data_out的有效性;ready_a用来指示本模块是否准备好接收上游数据,ready_b表示下游是否准备好接收本模块的输出数据;实现串行输入数据累加输出,输入端输入8bit数据,每当模块接收到4个输入数据后,输出端输出4个接收到数据的累加结果。输入端和输出端与上下游的交互采用valid-ready双向握手机制。要求上下游均能满速传输时,数据传输无气泡,不能由于本模块的设计原因产生额外的性能损失。原创 2023-04-26 16:15:50 · 231 阅读 · 0 评论 -
牛客网Verilog刷题——VL30
实现串并转换电路,输入端输入单bit数据,每当本模块接收到6个输入数据后,输出端输出拼接后的6bit数据。本模块输入端与上游的采用valid-ready双向握手机制,输出端与下游采用valid-only握手机制。数据拼接时先接收到的数据放到data_b的低位。电路的接口如下图所示。valid_a用来指示数据输入data_a的有效性,valid_b用来指示数据输出data_b的有效性;ready_a用来指示本模块是否准备好接收上游数据,本模块中一直拉高;rst_n是异步复位信号。原创 2023-04-26 13:55:23 · 262 阅读 · 0 评论 -
牛客网Verilog刷题——VL29
请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice=0时,发出方波信号;wave_choice=1时,发出锯齿波信号;wave_choice=2时,发出三角波信号。请使用Verilog HDL实现以上功能。原创 2023-04-26 13:53:58 · 255 阅读 · 0 评论 -
牛客网Verilog刷题——VL28
请编写一个序列检测模块,输入信号端口为data,表示数据有效的指示信号端口为data_valid。当data_valid信号为高时,表示此刻的输入信号data有效,参与序列检测;当data_valid为低时,data无效,抛弃该时刻的输入。当输入序列的有效信号满足0110时,拉高序列匹配信号match。请使用状态机实现以上功能,画出状态转移图并使用Verilog HDL编写代码实现以上功能,并编写testbench验证模块的功能。题目中要求使用状态机实现,可以画出其状态转换图,,如下。原创 2023-04-25 10:37:18 · 813 阅读 · 2 评论 -
牛客网Verilog刷题——VL27
请编写一个序列检测模块,检测输入信号(a)是否满足011100序列, 要求以每六个输入为一组,不检测重复序列,例如第一位数据不符合,则不考虑后五位。一直到第七位数据即下一组信号的第一位开始检测。当信号满足该序列,给出指示信号match。当不满足时给出指示信号not_match。请使用Verilog HDL实现以上功能,要求使用状态机实现,画出状态转化图。另外,我们还可以用计数器+移位寄存器的方式进行实现,如下。题目中要求使用状态机实现,可以画出其状态转换图。根据状态转换图,编写Verilog代码,如下。原创 2023-04-25 10:36:30 · 783 阅读 · 0 评论 -
牛客网Verilog刷题——VL26
请编写一个序列检测模块,检测输入信号a是否满足011XXX110序列(长度为9位数据,前三位是011,后三位是110,中间三位不做要求),当信号满足该序列,给出指示信号match。本题可以采用移位寄存器进行实现,序列的检测是连续的,只要按照先后顺序,输入的串行序列满足011XXX110,就给出一个match信号。输入输出信号描述如下。原创 2023-04-25 10:33:05 · 181 阅读 · 0 评论 -
牛客网Verilog刷题——VL25
在这里采用移位操作来检测串行输入的单比特信号a是否满足01110001,注意在这里满足是指任意8个时钟周期内满足输入的a为01110001,就给出信号match。比如输入的序列为01110001110001,在这里,在第8个时钟周期时,识别到串行输入的a为01110001,则给出一个match信号,而在第14个时钟周期,从第7个时钟周期算,到第14个时钟周期(011100。请编写一个序列检测模块,检测输入信号a是否满足01110001序列,当信号满足该序列,给出指示信号match。原创 2023-04-25 10:32:26 · 210 阅读 · 0 评论 -
牛客网Verilog刷题——VL24
上面两张图分别是使用连续赋值语句和if-else获取上升沿的结果,可以看到,在复位之后,输入的单比特数据a仍然为不定态X,此时使用连续赋值语句assign获取到的上升沿信号rise为不定态X,而使用if-else语句获取到的上升沿信号rise为低电平。然后,仿真一直保持,用例不通过,查看波形,原来是当a是不定态X的时候,使用连续赋值语句采集到的上升沿信号w_rise与下降沿信号w_down均为不定态X,如下图。原创 2023-04-25 10:31:29 · 142 阅读 · 0 评论 -
牛客网Verilog刷题——VL23
实现一个深度为8,位宽为4bit的ROM,数据初始化为0,2,4,6,8,10,12,14。可以通过输入地址addr,输出相应的数据data。需要注意的是,题目中说数据初始化为0,2,4,6,8,10,12,14,是对前8个地址初始化为该数值,即第0~7个地址。其中,输入的8比特位宽的地址和输出的4比特位宽的数据均为无符号数。原创 2023-04-25 10:30:57 · 134 阅读 · 0 评论 -
牛客网Verilog刷题——VL22
某同步时序电路的状态转换图如下,箭头上表示“C/Y”,圆圈内为现态,箭头指向次态。请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。电路的接口如下图所示,C是单bit数据输入端。在这里使用三段式状态机实现。原创 2023-04-25 10:30:07 · 136 阅读 · 0 评论 -
牛客网Verilog刷题——VL21
某同步时序电路转换表如下,请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。电路的接口如下图所示。原创 2023-04-25 10:29:54 · 166 阅读 · 0 评论 -
牛客网Verilog刷题——VL20
对比上述两个真值表,我们可以对该四选一数据选择器进行连接,将四选一数据选择器的S1连接到A,S0连接到B,D0连接0,D1连接C,D2连接~C,D3连接1。现在有一个现成的四选一数据选择器,示意图如下。请使用此四选一数据选择器和必要的逻辑门实现r如下表达式:L=A∙B+A∙~C+B∙C。根据该四选一数据选择器,我们可以得到该四选一选择器的输出Y=1的真值表,如下。而对于我们要实现的表达式:L=A∙B+A∙~C+B∙C。该四选一选择器的代码如下。原创 2023-04-24 14:47:11 · 341 阅读 · 0 评论 -
牛客网Verilog刷题——VL19
根据上述真值表,可以知道,当ABC为010、011、101、111时,输出L为1,所以L = Y2_n + Y3_n + Y5_n + Y7_n,这里“+”号表示或操作,在数电中,我们学过,或门可以用与非门进行替换,即L = ~(Y2_n & Y3_n & Y5_n & Y7_n)。在本题中,已经给出了下面74HC138译码器真值表对应的3-8译码器模块程序。需要例化该模块,实现逻辑函数:L=(~A)B+AC。在写Verilog代码前,根据需要实现的函数:L=(~A)B+AC。我们可以知道其真值表如下。原创 2023-04-24 14:46:14 · 133 阅读 · 0 评论 -
牛客网Verilog刷题——VL18
根据下面的真值表实现74HC138译码器。原创 2023-04-24 14:46:05 · 188 阅读 · 0 评论