通过模块实例调用实现大型系统的设计_第1页
通过模块实例调用实现大型系统的设计_第2页
通过模块实例调用实现大型系统的设计_第3页
通过模块实例调用实现大型系统的设计_第4页
通过模块实例调用实现大型系统的设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、评阅verilog hdl数字系统设计报告 10姓名 学号 时间 地点 实验题目 通过模块实例调用实现大型系统的设计 一、 实验目的:1 学习和掌握状态机的嵌入和模块实例的连接方法; 2 了解大型系统设计的层次化,结构化解决办法的技术基础; 3学习数据总线在模块设计中的应用和控制,掌握复杂接口模块设计的基础技术;4学习和编写用工程概念来编写较完整的测试模块,做到接近真实的完整测试。二、 实验环境:cpu型号: 英特尔 pentium dual-core t4200 2.00ghz 内存容量:4g (三星 ddr3 1067 mhz) 操作系统类型:windows xp sp3仿真软件:mode

2、lsim se 6.2b 三、 实验内容: 使用状态机的嵌套和模块化的方法编写并行与串行数据转换器,在modelsim中对产生的波形进行分析并验证运行过程,通过学习数据总线在模块设计中的应用和控制,掌握复杂接口模块设计的基础技术。四、 系统框图:框图:p_s状态图(并转串)s_p(串转并)五、 实验波形图: 1、nget_ad_data 由高电平变为低电平,发出控制信号, p_s的数据寄存器清零,状态寄存器置数。2、d_pin_ena从低电平变成高电平使并行数据从 data_buf 中输入数据进入p_s的寄存器中,之后该 信号从高电 平变成低电平,等待下次写入控制。3、d_bin_ena从低电

3、平变成高电平,控制数据从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,是一个多端控制的电路,符合现代电路的设计思想。在仿真过程中主要的问题是下载的代码由于格式问题存在部分错误,经

4、过了仔细的核对才运行成功。七、 附录:(代码。)/- 文件名p_s.v - /* * 模块功能:把在nget_ad_data负跳变沿时刻后能维持约三个 * * 时钟周期的并行字节数据取入模块,在时钟节拍下转换为字 * * 节的位流,并产生相应字节位流的有效信号 * */ define yes 1define no 0modulep_s(dbit_out,link_s_out,data,nget_ad_data,clk);input clk; /主时钟节拍input nget_ad_data; /负电平有效的取并行数据控制信号线 input7:0 data; /并行输入的数据端口。 output

5、 dbit_out; /串行位 流的输出 output link_s_out; /允许串行位流输出的控制信号 reg 3:0 state; /状态变量寄存器 reg7:0 data_buf; /并行数据缓存器 reg link_s_out; /串行位流输出的控制信号寄存器 reg d_buf; /位缓存器 reg finish_flag; /字节处理结束标志 assign dbit_out = (link_s_out)? d_buf:0; /给出串行数据。 always (posedge clk or negedge nget_ad_data) / nget_ad_data下降沿置数,寄存器清

6、零,clk上跳沿送出位流 if(!nget_ad_data) begin finish_flag =0; state = 9; link_s_out =no; d_buf = 0; data_buf =0; end else case(state) 9: begin data_buf = data; state =10; link_s_out =no; end 10: begin data_buf = data; state =0; link_s_out =no; end 0: begin link_s_out =yes; d_buf =data_buf7; state =1; end 1:

7、begin d_buf =data_buf6; state =2; end 2: begin d_buf =data_buf5; state =3; end 3: begin d_buf =data_buf4; state =4; end 4: begin d_buf =data_buf3; state =5; end 5: begin d_buf =data_buf2; state =6; end 6: begin d_buf =data_buf1; state =7; end 7: begin d_buf =data_buf0; state =8; end 8: begin link_s_

8、out =no; state = 4b1111; /do nothing state finish_flag =1; end default: begin link_s_out =no; state = 4b1111; /do nothing state end endcase endmodule /-文件名s_p.v - /*8* * 模块功能:把在位流有效信号控制下的字节位流读入模块, * * 在时钟节拍控制下转换为并行的字节数据,输出到并行 * * 数据口。 * */ timescale 1ns/1ns define yes 1 define no 0 module s_p(data,

9、dbit_in, dbit_ena, clk); output 7:0 data; /并行数据输出口 input dbit_in, clk; /字节位流输入口 input dbit_ena; /字节位流使能输入口 reg 7:0 data_buf; reg 3:0 state; /状态变量寄存器 reg p_out_link; /并行输出控制寄存器 assign data = (p_out_link=yes) ? data_buf : 8bz; always(negedge clk) if(dbit_ena ) case(state) 0: begin p_out_link =no; data

10、_buf7 = dbit_in; state =1; end 1: begin data_buf6 = dbit_in; state =2; end 2: begin data_buf5 = dbit_in; state =3; end 3: begin data_buf4 = dbit_in; state =4; end 4: begin data_buf3 = dbit_in; state =5; end 5: begin data_buf2 = dbit_in; state =6; end 6: begin data_buf1 = dbit_in; state =7; end 7: be

11、gin data_buf0 = dbit_in; state =8; end 8: begin p_out_link = yes; state = 4b1111; end default: state =0; endcase else begin p_out_link = yes; state =0; end endmodule /-文件名 sys.v - /* * 模块的功能: 把两个独立的逻辑模块(p_s和s_p)合并到一个可综合 * * 的模块中,共用一条并行总线,配合有关信号,分时进行输入/或输出。* * 模块的目的:学习如何把两个单向输入/输出的实例模块,连接在一起, * * 共享一

12、 条总线。 * * 本模块是完全可综合模块,已经通过综合和布线后仿真。 * */ include ./p_s.vinclude ./s_p.vmodule sys(databus,use_p_in_bus,dbit_out,dbit_ena,nget_ad_data,clk); input nget_ad_data; /取并行数据的控制信号 input use_p_in_bus; / 并行总线用于输入数据的控制信号 input clk; /主时钟 inout 7:0 databus; /双向并行数据总线 output dbit_out; /字节位流输出 output dbit_ena; /字节

13、位流输出使能 wire clk; wire nget_ad_data; wire dbit_out; wire dbit_ena; wire 7:0 data; assign databus = (!use_p_in_bus)? data : 8bzzzz_zzzz; p_s m0(.dbit_out(dbit_out),.link_s_out(dbit_ena),.data(databus), .nget_ad_data(nget_ad_data),.clk(clk); s_p m1(.data(data), .dbit_in(dbit_out), .dbit_ena(dbit_ena),.

14、clk(clk); endmodule /-文件名:top.v -/* * 模块的功能: 对合并在一起的可综合的模块sys 进行测试验证。其测试信号* * 尽可能地与实际情况一致,用随机数系统任务对数据的到来和时钟沿的 * * 抖动都进行了模拟仿真。本模块无任何工程价值,只有学习价值。 * */ timescale 1ns/1nsinclude ./sys.v / 改用不同级别的verilog 网表文件可进行不同层次的仿真module top; reg clk; reg7:0 data_buf; reg nget_ad_data; reg d_pin_ena; /并行数据输入sys模块的使能信

15、号寄存器 wire 7:0 data; wire clk2; wire dbit_ena; assign data = (d_pin_ena)? data_buf : 8bz; initial begin clk = 0; nget_ad_data =1; /置取数据控制信号初始值为高电平 data_buf = 8b1001_1001; /假设的数据缓存器的初始值,可用于模拟并行数据的变化 d_pin_ena = 0; end initial begin repeat(100) begin #(100*14+$random %23) nget_ad_data = 0; /取并行数据开始 # (112+$random %12) nget_ad_data = 1; /保持一定时间低电平后恢复高电平 # ($random%50) d_pin_ena = 1; /并行数据输入sys模块的使能信号有效 # (100*3 + $random%5) d_pin_ena = 0; /保持三个时钟周期后让出总线 # 333 data_buf = data_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论