好久不见,我又回来开新坑了。没错我就是那个一直挖坑还一直不填的Sinon
这学期开始接触数电了,感觉比模电好玩多了模电是什么废物玩意,而且因为数电极强的逻辑性以及又fpga这种可编程器件的存在,所以我觉得数电比模电更容易上手,而事实也是现在数电的发展远比模电强大。
闲话不多说,接下来我来介绍一下我设计的电子钟模块,它通过输入一个1Hz的时钟信号来达到计秒的功能,并且具有校准时、分、秒以及清零的功能。具体的实现方法是在内部设置了两套存储器,一套用于存储时钟信号计算的秒数,另一套用于存储用户自定义的校准时间,然后将两套存储相加即可输出最后的时分秒信号。
原理非常简单,算是我学习Verillog以来做的第一个模块了吧,接下来贴出代码:
module clock( input clk,h_ad,m_ad,s_ad,res, output reg[5:0]h, output reg[5:0]m, output reg[5:0]s ); reg[5:0]h1; reg[5:0]m1; reg[5:0]s1; reg[5:0]h2; reg[5:0]m2; reg[5:0]s2; reg[6:0]m_tmp; initial begin h=0; m=0; s=0; h1=0; h2=0; m1=0; m2=0; s1=0; s2=0; end always @(posedge clk,negedge res)begin s1=s1+1; if(s1==60)begin s1=0; m1=m1+1; end if(m1==60)begin m1=0; h1=h1+1; end if(h1==24) h1=0; if(!res)begin s1=0; m1=0; h1=0; end end always @(h_ad,m_ad,s_ad,res)begin if(h_ad) h2=h2+1; if(m_ad)begin m2=m2+1; if(m2==60)begin m2=0; h2=h2+1; end end if(h2==24) h2=0; if(s_ad)begin s2=s1; end if(!res)begin s2=0; m2=0; h2=0; end end always @(h1,h2,m1,m2,s1,s2)begin h=h1+h2; m_tmp=m1+m2; if(s1>=s2) s=s1-s2; else begin s=s1+60-s2; if(m_tmp==0)begin h=h-1; m_tmp=59; end else m_tmp=m_tmp-1; end if(m_tmp>=60)begin m_tmp=m_tmp-60; h=h+1; end m=m_tmp[5:0]; if(h>=24) h=h-24; end endmodule
江大佬牛逼
波形发生器整活
懒得整