比赛传送门:https://ac.nowcoder.com/acm/contest/52441感觉整体难度有点偏大。?作者:Eriktse?简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)??个人博客:www.eriktse.comA-蛋挞签到题。只需比较a/b和a%b的大小即可。注意开longlong。#include#defineintlonglongusingnamespacestd;signedmain(){inta,b;scanf("%lld%lld",&a,&b);if(a
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
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
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
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
VL45 异步FIFO很经典的手撕题,这道题要求产生的格雷码要在本时钟域中打一拍,其实不打也没关系。 主要要记住1、bin2gray的方法:右移一位与移位前异或;2、格雷码比较方法:空:读指针格雷码和写指针同步过来的格雷码相同;满:写指针格雷码高两位与读指针同步过来的格雷码正好相反,低位相同。`timescale1ns/1ns/***************************************RAM*****************************************/moduledual_port_RAM#(parameterDEPTH=16,parameterW
VL45 异步FIFO很经典的手撕题,这道题要求产生的格雷码要在本时钟域中打一拍,其实不打也没关系。 主要要记住1、bin2gray的方法:右移一位与移位前异或;2、格雷码比较方法:空:读指针格雷码和写指针同步过来的格雷码相同;满:写指针格雷码高两位与读指针同步过来的格雷码正好相反,低位相同。`timescale1ns/1ns/***************************************RAM*****************************************/moduledual_port_RAM#(parameterDEPTH=16,parameterW
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 含有无关项的序列检测和上一题一样用移位
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 含有无关项的序列检测和上一题一样用移位
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