VL50 简易秒表`timescale1ns/1nsmodulecount_module(inputclk,inputrst_n,outputreg[5:0]second,outputreg[5:0]minute);always@(posedgeclkornegedgerst_n)beginif(~rst_n)second'd0;elseif(minute==60)secondsecond;elsesecond60)?second+1:1;endalways@(posedgeclkornegedgerst_n)beginif(~rst_n)minute'd0;elseif(second==60
VL45 异步FIFO很经典的手撕题,这道题要求产生的格雷码要在本时钟域中打一拍,其实不打也没关系。 主要要记住1、bin2gray的方法:右移一位与移位前异或;2、格雷码比较方法:空:读指针格雷码和写指针同步过来的格雷码相同;满:写指针格雷码高两位与读指针同步过来的格雷码正好相反,低位相同。`timescale1ns/1ns/***************************************RAM*****************************************/moduledual_port_RAM#(parameterDEPTH=16,parameterW
这次设计一个RGB灯的控制器,该控制器具有如下特点:每个灯的颜色可调,亮灭可控可以设置参数来修改RGB的数目 WS2812B的数据时序如下图所示: (图片来源自网络、侵权删) 为了方便设计我把T1H和T0L的时间值设为0.8us,为了稳定将RES设置为60us。 设计的思路是,设置一个400ns的计时器,然后再设置一个计400ns次数的计时器(每计三次清零),然后1码就是前两个400us为高电平,第三个400us为低电平;0码也是同理。一、设计的代码1、单像素控制模块`timescale1ns/1ps/////////////////////////////////////////////
VL33 非整数倍数据位宽转换8to12和上一题一样的,注意valid_out输出时加一个valid_in(其实32题也要加,不过不加仿真也能过)。`timescale1ns/1nsmodulewidth_8to12(inputclk,inputrst_n,inputvalid_in,input[7:0]data_in,outputregvalid_out,outputreg[11:0]data_out);reg[2:0]count;always@(posedgeclkornegedgerst_n)beginif(~rst_n)count0;elseif(valid_in)count2)?co
一、m_sequencer1、什么是m_sequencerm_sequencer是定义在uvm_sequencer_item中的,uvm_sequencer_base类型的句柄,也就是说m_sequencer是uvm_sequencer_item的成员变量m_sequencer是指向uvm_sequencer_base的句柄任何派生于uvm_sequencer_item的类都会拥有一个m_sequencerm_sequencer源码如下:classuvm_sequence_itemextendsuvm_transaction;...protecteduvm_sequencer_basem_se
VL25 输入序列连续的序列检测这种题用移位寄存器是最方便的,用状态机会麻烦很多。`timescale1ns/1nsmodulesequence_detect(inputclk,inputrst_n,inputa,outputregmatch);reg[7:0]seq;always@(posedgeclkornegedgerst_n)beginif(~rst_n)beginseq0;match0;endelsebeginseq6:0],a};if(seq==8'b01110001)match1;elsematch0;endendendmoduleVL26 含有无关项的序列检测和上一题一样用移位
VL21 根据状态转移表实现时序电路写一个简单的Moore状态机就可以了,太短就懒得写三段式了。`timescale1ns/1nsmoduleseq_circuit(inputA,inputclk,inputrst_n,outputwireY);reg[1:0]state;always@(posedgeclkornegedgerst_n)beginif(~rst_n)state0;elsebegincase(state)0:state3:1;1:state0:2;2:state1:3;3:state2:0;endcaseendendassignY=(state==2'b11);endmodul
VL11 4位数值比较器电路根据题目真值表把情况全部列出来,纯体力活。`timescale1ns/1nsmodulecomparator_4(input[3:0]A,input[3:0]B,outputwireY2,//A>BoutputwireY1,//A=BoutputwireY0//A);assignY2=(A[3]&~B[3])||((~A[3]^B[3])&&(A[2]&~B[2]))||((~A[3]^B[3])&&(~A[2]^B[2])&&(A[1]&~B[1]))||((~A[3]^B[3])&&(~A[2]^B[2])&&(~A[1]^B[1])&&A[0]&~B[0]);
VL1 四选一多路器`timescale1ns/1nsmodulemux4_1(input[1:0]d1,d2,d3,d0,input[1:0]sel,output[1:0]mux_out);//*************code***********//assignmux_out=(sel==0)?d3:((sel==1)?d2:((sel==2)?d1:d0));//*************code***********//endmoduleVL2 异步复位的串联T触发器题目已经提示了是两个串联的T触发器,只要记得T触发器在输入高电平时,输出翻转即可。`timescale1ns/1nsm
这次设计一个DDS信号发生器。该设计的特点有:双通道的DA输出,可以调节幅度(通过旋转板子上的电位器)、频率、相位、和波形(正弦波、方波、三角波)。拥有相位重置的功能,能够同时重置两个输出波形的相位。本次采用的是小梅哥的ACM2108模块。该模块有两个通道的ADC和两个通道的DAC。本次设计的前置是DDS基本模块,具体可点击链接查看。DDS基本模块在加入了装有正弦波数据的ROM的基础上,再添加三角波和方波的数据的ROM,从而能够切换输出的波形。通过调用VIO这个IP核,设置输出信号的频率、相位和波形。然后通过LIA这个IP核,去观察数据波形。一、模块代码`timescale1ns/1ps///