您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > Verilog HDL语言
VerilogHDL复杂数字系统设计南通大学电子信息学院本课程主要内容数字系统实例:FIFO异步串行通信接口调制解调器I2C接口的EEPROM读写器CISCCPURISCCPU例1:一个挂在总线上的8位寄存器。moduleregister0(db,nce,nwe);inout[7:0]db;inputnce,nwe;reg[7:0]q;assigndb=(nce||(!nwe))?8'bzzzzzzzz:q;always@(posedgenwe)beginif(nce==0)q=db;endendmodule复习例2:带有异步清零端的同步4位二进制加法计数器modulencounter(rst,clk,q);inputrst,clk;output[3:0]q;reg[3:0]q;always@(posedgeclkornegedgerst)if(!rst)q=0;elseif(q==15)q=0;elseq=q+1;endmodule同步清零?例3:分频器的设计modulenfrequency(rst,clk,q);inputrst,clk;output[3:0]q;reg[3:0]q;always@(posedgeclkornegedgerst)if(!rst)q=0;elseif(q==15)//可以实现16分频q=0;elseq=q+1;endmodule同步清零?其它分频系数?例4:11111010000序列检测器moduleshift(q,s,d,clk);output[11:0]q;outputs;inputd;inputclk;reg[11:0]q;regs;always@(posedgeclk)beginq=q1;q[0]=d;endalways@(posedgeclk)if(q==12'b11111010000)s=1;elses=0;endmodule例5:设计一个容量为1kB的RAM。modulememory(d,a,we,rd);inout[7:0]d;input[9:0]addr;inputwe,rd;wire[7:0]q;assignd=rd?q:8’hzz;lpm_ram_dp0ram0(d,a,a,we,rd,q);endmodule1.以结构描述方式实现下列逻辑:Y=ABC+DE+CFG2.试设计一个具有使能端ncs的2-4译码器。3.中断请求有效电平为高电平,中断请求输入线INTR0—INTR15中INTR15优先权最高。试设计一个中断优先权编码器。当有中断请求时,INT=1,同时输出中断请求输入线的编码V;否则INT=0,V的输出任意。4.试设计一个4位加减运算器,输入为A、B、CIN、M,输出为OUT和COUT。当M=0时执行加法运算,M=1时,执行减法运算。5.试设计一个14分频器,要求占空比1:1。6.试设计一个具有三态输出缓冲的8位数据寄存器。7.试设计一个具有清0和置数功能的8位二进制加1计数器。8.设计一个8位的加/减计数器。时钟信号为clk,同步清0信号为rst。clk上升沿时刻,当inc=1计数器加2,当dec=1计数器减1,其它情况时计数器保持不变。9.设计一个16位移位寄存器。10.设计一个16位双向移位寄存器,当d=0时右移,d=1时左移。11.设计一个产生0100100111的序列信号发生器。12.试以调用库函数的方法设计一个容量为8K×24bit的RAM。其双向数据线为D[0:23],地址线为A[0:12],写信号为new(低电平有效),读信号为nrd(低电平有效)。13.设计一个位宽为8位、深度为8层的堆栈。14.试按下图设计VerilogHDL模型。s0s1s2s3s411/00?/010/101/000/11?/01?/000/001/100/01?/01?/010/100/001/1?1/0第一章先进先出数据缓冲器设计1.1FIFO工作原理先进先出数据管理ph-----头指针(指向第一个数据)pe------尾指针(指向第一个空单元)判缓冲器空条件:当pe=ph--------空判缓冲器满条件:当pe+1=ph-----满clknresetfifo_infifo_outfifo_wrfifo_rdbusyemptyfullFIFOclknresetfifo_infifo_outfifo_wrfifo_rdbusyemptyfullFIFOfifo_infifo_outrdwrphpe,,,,,qrdenwrenwraddressdatardaddressRAM1.2状态转换图采用同步时序状态机:3个状态stopwritereadfifo_rd=1/rd=1fifo_rd=0/rd=0fifo_wr=1/wr=1fifo_wr=0/wr=0写操作---需要2个clk完成读操作---需要2个clk完成1.3FIFO模型设计之一//FIFO//Size:255Bytesmodulefifo(clk,nreset,pe,ph,fifo_in,fifo_out,fifo_wr,fifo_rd,busy,empty,full,state,wr,rd);inputclk,nreset,fifo_wr,fifo_rd;//input[7:0]fifo_in;output[1:0]state;outputempty,full,wr,rd,busy;//output[7:0]fifo_out,pe,ph;reg[1:0]state;reg[7:0]fifo_out;regwr,rd,empty,full;//fifowrite,read,empty,fullreg[7:0]pe,ph;//fifopoint:P_end,P_headparameterwrite=1,read=2,stop=0;always@(posedgeclk)if(nreset==0)beginpe=0;ph=0;endelsecase(state)stop:if(fifo_wr==1&&pe+1!==ph)//writestartbeginrd=0;wr=1;state=write;busy=1;endelseif(fifo_rd==1&&pe!==ph)//readstartbeginwr=0;rd=1;state=read;busy=1;endelsebeginwr=0;rd=0;state=stop;busy=0;if(ph==pe)empty=1;elseif(pe+1==ph)full=1;elsebeginempty=0;full=0;endendwrite:if(fifo_wr==0)//endofwritebeginpe=pe+1;wr=0;rd=0;state=stop;busy=0;empty=0;if(pe+2==ph)full=1;elsefull=0;endread:if(fifo_rd==0)//endofreadbeginph=ph+1;wr=0;rd=0;state=stop;busy=0;full=0;if(ph+1==pe)empty=1;elseempty=0;endendcaselpm_ram_dp1ram0(fifo_in,pe,ph,wr,rd,fifo_out);//modulelpm_ram_dp0(data,wraddress,rdaddress,wren,rden,q);endmodule仿真结果:1.4FIFO模型设计之二支持连续写,连续读。启动写操作,外部单一时钟节拍写,实际完成需滞后一拍启动读操作,外部单一时钟节拍读,但需等待一拍读、写不可同时进行//Fifoofcontinuousoperation//Size:255Bytesmodulefifo_c(clk,nreset,pe,ph,fifo_in,fifo_out,data,fifo_wr,fifo_rd,busy,empty,full,state,wr,rd);inputclk,nreset,fifo_wr,fifo_rd;//input[7:0]fifo_in;output[1:0]state;outputempty,full,wr,rd,busy;//output[7:0]fifo_out,pe,ph,data;reg[1:0]state;reg[7:0]fifo_out,data;regwr,rd,empty,full,busy;//fifowrite,read,empty,fullreg[7:0]pe,ph;//fifopoint:P_end,P_headparameterwrite=1,read=2,stop=0;always@(posedgeclk)if(nreset==0)beginpe=0;ph=0;endelsecase(state)stop:if(fifo_wr==1&&pe+8'b00000001!==ph)//writestartbeginrd=0;wr=1;state=write;busy=1;data=fifo_in;endelseif(fifo_rd==1&&pe!==ph)//readstartbeginwr=0;rd=1;state=read;busy=1;endelsebeginwr=0;rd=0;state=stop;busy=0;if(ph==pe)empty=1;elseif(pe+1==ph)full=1;elsebeginempty=0;full=0;endendwrite:beginpe=pe+8'b00000001;data=fifo_in;if(fifo_wr==0)//endofwritebeginwr=0;rd=0;state=stop;busy=0;empty=0;if(pe+8'b00000010==ph)full=1;elsefull=0;endelse//writecontinueif(pe+8'b00000010==ph)begin//bufferisfull.nottowrite.full=1;wr=0;rd=0;state=stop;busy=0;empty=0;endelse//writecontinuebeginwr=1;rd=0;state=write;busy=1;empty=0;endendread:beginph=ph+8'b00000001;if(fifo_rd==0)//endofreadbeginwr=0;rd=0;state=stop;busy=0;full=0;if(ph+8'b00000001==pe)empty=1;elseempty=0;endelse//readcontinueif(ph+8'b00000001==pe)//emptybeginwr=0;rd=0;state=stop;busy=0;full=0;endelse//notemptybeginwr=0;rd=1;state=read;busy=1;endendendcaselpm_ram_dp1ram0(data,pe,ph,wr,rd,clk,fifo_out);endmodule实验1FIFO设计与仿真验证要求:缓冲大于100级数据宽度16位[习题1]设计一个产生0100100111的序列信号发生器。[习题2]试以调用库函数的方法设计一个容量为8K×24bit的RAM。其双向数据线为D[0:23],地址线为A[0:12],写信号为new(低电平有效),读信号为nrd(低电平有效)。[习题3]设计一个8位的加/减计数器。时钟信号为clk,同步清0信号为rst。clk上升沿时刻,当inc=1计数器加2,当dec=1计数器减2,其它情况时计数器保持不变。[习题4]设计一个位宽为8位、深度为8层的堆栈
本文标题:Verilog HDL语言
链接地址:https://www.777doc.com/doc-5471768 .html