您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Verilog-HDL2011_2012
VerilogHDL复杂数字系统设计南通大学电子信息学院本课程主要内容数字系统的实例:FIFO异步串行通信接口调制解调器I2C接口的EEPROM读写器CISCCPURISCCPU例1-1: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例1-2:11010100序列信号发生器。modulegenerator(out,clk);output[2:0]state;outputout;inputclk;reg[2:0]state;regout;always@(posedgeclk)beginstate=state+1;case(state)3’b000:out=1;3’b001:out=1;3’b010:out=0;3’b011:out=1;3’b100:out=0;3’b101:out=1;3’b110:out=0;3’b111:out=0;default:out=0;endcaseendendmodule例1-3:设计一个容量为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);endmodule第一章先进先出数据缓冲器设计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层的堆栈。第二章定时器/计数器接口电路设计目的:设计一个与INTEL8253兼容的定时器/计数器2.1定时器/计数器接口电路的功能3通道、6种工作方式16位计数器(每个计数器可按二进制或十进制来计数,时钟脉冲下降沿使计数器进行减1操作)计数器初值寄存器GATECLKiOUTi减1计数器16位计数通道结构:可编程地址线:A1A0端口地址:A1A0=00-------CN0数据端口01-------CN1数据端口10-------CN2数据端口11--------控制端口数据线:D7-D0控制线:/we,/rd,/cs通道I/O:clk0,out0,gate0clk1,out1,gate1clk2,out2,gate22.28253的内部结构和引脚特性数据总线缓冲器读/写控制逻辑控制字寄存器计数器0计数器1计数器2CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2RDWRCSA0A1CSWRRDD7D0GND……VCCA01121324b)引脚图a)内部结构图CLK0GATE0OUT0A1CLK1GATE1OUT1GATE2OUT2CLK2D7~D02.38253控制字格式SC1SC2RW1RW2M2M1M0BCD00:计数器001:计数器110:计数器211:无意义00:锁存计数值01:只读/写低8位10:只读/写高8位11:先读/写低8位后读/写高8位000:方式0001:方式1X10:方式2X11:方式3100:方式4101:方式50:二进制计数1:十进制计数D7D6D5D4D3D2D1D0编程步骤:•先写控制字(到控制口)•再写计数器初值(到相应的通道端口)2.4工作方式与工作时序1.方式0(单脉冲发生器)计数器只计一遍。控制字写入后,OUT端为低;当计数初值写入后,在下一个CLK脉冲的下降沿将计数初值寄存器内容装入减1计数寄存器,然后计数器开始减1计数,在计数期间,当减1计数器回0之前,输出端OUT维持低电平。当计数值回0时,OUT输出端变为高电平,并保持到重新写入新的控制字或新的计
本文标题:Verilog-HDL2011_2012
链接地址:https://www.777doc.com/doc-5036513 .html