资源描述:
《53用户定义元件(UDP).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用户定义元件(UDP)PrimitiveUDP_name(OutputName,List_of_inputs);Output_declaration;List_of_input_declarations;[reg_declaration];[initial_statement];//输出端赋以初值(0,1或x)tablelist_of_table_entries;endtableendprimitiveUDP只能有一个输出和一个或多个输入,第一个端口必须是输出端口,取值为0,1或x(不允许为z),输入中出现
2、z以x处理。所有的端口变量都必须是1位的其行为以表的形式处理二选一多路选择器(UDP)PrimitiveMux2x1(out,in1,in2,Sel);Outputout;Inputin1,in2,sel;table//in1in2sel:out0?1:0;//“?”表示既可以是0,也可以是11?1:1;?00:0;?10:1;00x:0;11x:1;endtableendprimitive带异步清零的D触发器(UDP)PrimitiveD_Async_FF(Q,Clk,Clr,Data);outputQ;
3、regQ;inputClk,Clr,Data;table//ClkClrData:Q(state):Q(next)(01)00:?:0;//(01)表示0转换到1(01)01:?:1;(01)01:1:1;(01)00:0:0;//忽略时钟负边沿,(?1)0?:?:-;//“-”表示值无变化(?1)1?:?:0;?1?:?:0;endtableendprimitiveVerilog系统函数从文件读取数据$readmemh(“filename”,memory_namebegin_addrend_addr);/
4、/16进制$readmemb("filename",memory_namebegin_addrend_addr);//2进制写数据到文件$writememh(“filename”,memory_namebegin_addrend_addr);//16进制$writememb("filename",memory_namebegin_addrend_addr);//2进制Verilog系统函数begin_addr,end_addr可以省略,省略的时候,read操作时,以文件的大小为准,write操作时,以mem
5、ory的size为准.在read操作的文件中,允许空格,TAB键,换行,空行,以及注释.数据文件中可以包括注释语句数据只允许以二进制或十六进制存放,不能包含位宽与基数说明内容。各个数据之间以空白符间隔。每个数据位允许出现逻辑值的四种状态与下划线数据文件中允许包含地址说明,形式为“@hhhh”,其中“@”为地址说明符,“h”表示地址以十六进制形式给出。ROMmoduleROM(addr,data,oeb);input [14:0]addr;//地址信号output[7:0]data;//数据信号inputoe
6、b;//读使能信号,低电平有效//用寄存器数组来模拟ROMreg[7:0]mem[0:32767];//定义读操作延迟时间parameterRDELAY=1500;assign#RDELAYdata=(oeb==0)?mem[addr]:8'hzz;//Simulation开始时,从文件中读入数据intial$readmemh("rom_data.hex",mem);endmoduleRAMmoduleRAM(addr,data,ceb,web,oeb);input[14:0]addr;inou
7、t[7:0]data;//ceb:片选信号,oeb:读使能信号,web:写使能信号inputceb,oeb,web;reg[7:0]mem[0:32767];wireWRITE,READ;//定义读,写操作延迟时间paremeterWDELAY=1000,RDELAY=1500;RAM//当WRITE,和数据线上信号发生变化,读入一个数据always@(WRITEordata)begin #WDELAY if(WRITE)mem[addr]<=data;endassignREAD
8、=(oeb==0)&(ceb==0);assignWRITE=(web==0)&(ceb==0);assign#RDELAYdata=READ?mem[addr]:8'hzz;endmodule