您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 通过模块实例调用实现大型系统的设计
VerilogHDL数字系统设计报告10姓名学号时间地点实验题目通过模块实例调用实现大型系统的设计一、实验目的:1.学习和掌握状态机的嵌入和模块实例的连接方法;2.了解大型系统设计的层次化,结构化解决办法的技术基础;3.学习数据总线在模块设计中的应用和控制,掌握复杂接口模块设计的基础技术;4.学习和编写用工程概念来编写较完整的测试模块,做到接近真实的完整测试。二、实验环境:CPU型号:英特尔PentiumDual-CoreT4200@2.00GHz内存容量:4G(三星DDR31067MHz)操作系统类型:WindowsXPSP3仿真软件:ModelSimSE6.2b三、实验内容:使用状态机的嵌套和模块化的方法编写并行与串行数据转换器,在Modelsim中对产生的波形进行分析并验证运行过程,通过学习数据总线在模块设计中的应用和控制,掌握复杂接口模块设计的基础技术。四、系统框图:框图:评阅P_S状态图(并转串)S_P(串转并)五、实验波形图:data_buf=data不允许串行输出写入data_buf[7]写入data_buf[6]写入data_buf[5]写入data_buf[4]写入data_buf[3]写入data_buf[2]写入data_buf[1]写入data_buf[0]finish_flag=1允许输出并行数据data_buf=data不允许串行输出输出data_buf[7]输出data_buf[6]输出data_buf[5]输出data_buf[4]输出data_buf[3]输出data_buf[2]输出data_buf[1]输出data_buf[0]p_out_link允许输出并行1、nGet_AD_data由高电平变为低电平,发出控制信号,P_S的数据寄存器清零,状态寄存器置数。2、D_Pin_ena从低电平变成高电平使并行数据从data_buf中输入数据进入P_S的寄存器中,之后该信号从高电平变成低电平,等待下次写入控制。3、D_Bin_ena从低电平变成高电平,控制数据从P_S的D_Bin_out接口向S_P的寄存器中写入,数据写完后变为低电平。;六、体会:这次的电路系统部件与第九次实验的转换器电路相似,只是串转并、并转串转换器通过电路进行了组合互联,其功能仍很简单。数据在nGet_AD_data、D_Pin_ena的控制下进行并转串的转换和输出,再在D_Bin_ena等信号的控制下进入串转并的转换器中最终输出。而这个设计中不同于单个转换器,加入许多的控制信号如nGet_AD_data、D_Bin_ena、D_Pin_ena,是一个多端控制的电路,符合现代电路的设计思想。在仿真过程中主要的问题是下载的代码由于格式问题存在部分错误,经过了仔细的核对才运行成功。七、附录:(代码。)//---------------------文件名P_S.v---------------------------/****************************************************************************模块功能:把在nGet_AD_data负跳变沿时刻后能维持约三个******时钟周期的并行字节数据取入模块,在时钟节拍下转换为字******节的位流,并产生相应字节位流的有效信号*****************************************************************************/`defineYES1`defineNO0moduleP_S(Dbit_out,link_S_out,data,nGet_AD_data,clk);inputclk;//主时钟节拍inputnGet_AD_data;//负电平有效的取并行数据控制信号线input[7:0]data;//并行输入的数据端口。outputDbit_out;//串行位流的输出outputlink_S_out;//允许串行位流输出的控制信号reg[3:0]state;//状态变量寄存器reg[7:0]data_buf;//并行数据缓存器reglink_S_out;//串行位流输出的控制信号寄存器regd_buf;//位缓存器regfinish_flag;//字节处理结束标志assignDbit_out=(link_S_out)?d_buf:0;//给出串行数据。always@(posedgeclkornegedgenGet_AD_data)//nGet_AD_data下降沿置数,寄存器清零,clk上跳沿送出位流if(!nGet_AD_data)beginfinish_flag=0;state=9;link_S_out=`NO;d_buf=0;data_buf=0;endelsecase(state)9:begindata_buf=data;state=10;link_S_out=`NO;end10:begindata_buf=data;state=0;link_S_out=`NO;end0:beginlink_S_out=`YES;d_buf=data_buf[7];state=1;end1:begind_buf=data_buf[6];state=2;end2:begind_buf=data_buf[5];state=3;end3:begind_buf=data_buf[4];state=4;end4:begind_buf=data_buf[3];state=5;end5:begind_buf=data_buf[2];state=6;end6:begind_buf=data_buf[1];state=7;end7:begind_buf=data_buf[0];state=8;end8:beginlink_S_out=`NO;state=4'b1111;//donothingstatefinish_flag=1;enddefault:beginlink_S_out=`NO;state=4'b1111;//donothingstateendendcaseendmodule//-------------------------------------文件名S_P.v----------------------------------------/**********************************************************************8******模块功能:把在位流有效信号控制下的字节位流读入模块,******在时钟节拍控制下转换为并行的字节数据,输出到并行******数据口。*****************************************************************************/`timescale1ns/1ns`defineYES1`defineNO0moduleS_P(data,Dbit_in,Dbit_ena,clk);output[7:0]data;//并行数据输出口inputDbit_in,clk;//字节位流输入口inputDbit_ena;//字节位流使能输入口reg[7:0]data_buf;reg[3:0]state;//状态变量寄存器regp_out_link;//并行输出控制寄存器assigndata=(p_out_link==`YES)?data_buf:8'bz;always@(negedgeclk)if(Dbit_ena)case(state)0:beginp_out_link=`NO;data_buf[7]=Dbit_in;state=1;end1:begindata_buf[6]=Dbit_in;state=2;end2:begindata_buf[5]=Dbit_in;state=3;end3:begindata_buf[4]=Dbit_in;state=4;end4:begindata_buf[3]=Dbit_in;state=5;end5:begindata_buf[2]=Dbit_in;state=6;end6:begindata_buf[1]=Dbit_in;state=7;end7:begindata_buf[0]=Dbit_in;state=8;end8:beginp_out_link=`YES;state=4'b1111;enddefault:state=0;endcaseelsebeginp_out_link=`YES;state=0;endendmodule//-------------------------------文件名sys.v-----------------------------------------------/******************************************************************************模块的功能:把两个独立的逻辑模块(P_S和S_P)合并到一个可综合******的模块中,共用一条并行总线,配合有关信号,分时进行输入/或输出。******模块的目的:学习如何把两个单向输入/输出的实例模块,连接在一起,******共享一条总线。******本模块是完全可综合模块,已经通过综合和布线后仿真。*******************************************************************************/`include./P_S.v`include./S_P.vmodulesys(databus,use_p_in_bus,Dbit_out,Dbit_ena,nGet_AD_data,clk);inputnGet_AD_data;//取并行数据的控制信号inputuse_p_in_bus;//并行总线用于输入数据的控制信号inputclk;//主时钟inout[7:0]databus;//双向并行数据总线outputDbit_out;//字节位流输出outputDbit_ena;//字节位流输出使能wireclk;wirenGet_AD_data;wireDbit_out;wireDbit_ena;wire[7:0]data;assigndatabus=(!use_p_in_bus)?data:8'bzzzz_zzzz;P_Sm0(.Dbit_out(Dbit_out),.link_S_out(Dbit_ena),.data(databus),.nGet_AD_data(nGet_AD_data),.clk(clk));S_Pm1(.data(data),.Dbit_in(Dbit_out),.Dbit_ena(Dbit_ena),.clk(clk));endmodule//-------------文件名:Top.v------------------/******************************************************************************模块的功能:对合并在一起的可综合的模块sys进行测试验证。其测试信号******尽可能地与实际情况一致,用随机数系统任务对数据的到来和时钟沿的******抖动都进行了模拟仿真。本模块无任何工程价
本文标题:通过模块实例调用实现大型系统的设计
链接地址:https://www.777doc.com/doc-5084300 .html