特权视屏笔记_第1页
特权视屏笔记_第2页
特权视屏笔记_第3页
特权视屏笔记_第4页
特权视屏笔记_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、流水灯1. 流水灯: 顶层模块(例化各个模块) 分频模块(得到固定频率10HZ)显示模块 (随固定频率来操作led)2. 代码设计:water_led.v module water_led(clk,rst_n,led_data) Clk_design(clk,rst_n,led_en) Led_display(clk,rst_n,led_en)任意分频ps/2标准接口1) DATA 数据信号2) N.C 不连接3) GND 数字地4) VCC +5v电源5) CLK 时钟信号6) N.C 不连接2. 帧格式Clk下降沿锁存 数据Data 1bit起始位 8bit数据位 1bit校验位 1bit

2、停止位 1bit校验位3. 键盘编码返回值1) 按下或按住 发送通码2) 释放 发送断码3) 扫描码集 现代的键盘默认使用第二套扫描码4. ps/2接口5. 顶成模块接口定义乘法器1. 组合逻辑设计 : 电路事先将所有的乘积项计算出来,再加法运算2. 时序逻辑设计 : 电路将部分已经得到的结果右移,然后与乘积项相加并保存和值,反复迭代上述步骤知道计算出乘积。3. 接口定义串口通信 & 模块化设计 1.接口定义注:Rs232_rx input 2. 模块化设计1) .顶层文件 + 底层文件 顶层文件只作例化 底层文件实现各个功能模块 2) 例化 模块名 例化名 接口例化 (.clk(cl

3、k), .rst(rst)); 3) 端口没有与外部接口连接的 即从一个模块传到另一个模块 的端口 在顶层模块中 为Wire型 3. 波特率控制收/发 发送模块 接收模块 基于Altera Quartus II的模块化设计应用 和ISE不一样,Quartus II代码的模块化视图并不是你把子模块例化到顶层模块以后就能马上在工程代码窗口看到一个清晰的层次图。而是必须在你编译后才能够看到层次化的视图。 我在这里列举一个串口通信(实验10)的实例: 编写完该HDL的代码,还没有编译,此时在Project Navigator窗口中只有顶层模块my_uart_top。 顶层模块如下(详细的注释代码请参考

4、相关实验):/module my_uart_top( clk,rst_n, rs232_rx,rs232_tx );input clk;input rst_n;input rs232_rx;output rs232_tx; wire bps_start1,bps_start2;wire clk_bps1,clk_bps2;wire7:0 rx_data;wire rx_int; /speed_select speed_rx( .clk(clk), .rst_n(rst_n), .bps_start(bps_start1), .clk_bps(clk_bps1) ); my_uart_rx my

5、_uart_rx( .clk(clk), .rst_n(rst_n), .rs232_rx(rs232_rx), .rx_data(rx_data), .rx_int(rx_int), .clk_bps(clk_bps1), .bps_start(bps_start1) ); / speed_select speed_tx( .clk(clk), .rst_n(rst_n), .bps_start(bps_start2), .clk_bps(clk_bps2) ); my_uart_tx my_uart_tx( .clk(clk), .rst_n(rst_n), .rx_data(rx_dat

6、a), .rx_int(rx_int), .rs232_tx(rs232_tx), .clk_bps(clk_bps2), .bps_start(bps_start2) );Endmodule 我们一般不在顶层模块做任何逻辑设计,哪怕只是一个逻辑与操作。比较好的设计会明确的区分每一个模块单元。在上面这个设计中,是要实现一个串口自收发通信的功能。具体说就是不断的检测串口接收信号rs232_rx是否有数据,如果接收到起始位就把数据保存,然后再转手把接收到的数据通过串口发送信号rs232_tx发回给对方。即使是这样一个还不算太复杂的功能,如果都堆到一个模块里,代码不仅又臭又长,编写代码者如果不理好思

7、路很容易自己就写晕了,以后维护起来或者要移植就更难了。所以,模块化的设计势在必行。上面的代码把这个设计分成了四个模块:1、My_uart_tx:串口数据接收模块;2、Speed_tx:串口数据接收时钟校准模块;3、My_uart_rx:串口数据发送模块;4、Speed_rx:串口数据发送时钟校准模块。 如此划分,层次清晰而且思路明确,写起代码来更是游刃有余。先来说模块例化的一些细节吧。就拿speed_select模块例化来看。第一行的speed_select speed_rx,其中speed_select是要例化的模块名,是固定的;而speed_rx则是你任意给这个模块取的名字,它是用于区分例

8、化多个相同的模块。就如speed_tx和speed_rx两个模块,因为它们的逻辑设计都是一样的,所以写一个模块,然后在例化的时候给个不同的名称就可以了。这有点类似软件设计中的子程序调用,但又有不同,由于硬件设计的并行性,这里的逻辑复制实际上在最后的硬件上是实现了两个一模一样的speed_select设计原型,可以说它们是完全独立的。即便是对于硬件资源的消耗没有减少,采用模块化设计以后也能从很大程度上减少设计者的重复劳动。 信号的例化是这样的.clk(clk),点号后的clk代表例化模块内部的信号(是固定的,必须和内部的信号名一致),而括号内的clk则是例化模块的外部连接,可以例化模块内的信号名

9、不同。 在编译后,可以从Project Navigator窗口中看到例化的子模块: 另外,从Quartus II提供的RTL视图里,我们能够更深刻的感受到模块化带来的层次感: IIC协议1,了解 用verilog 实现 iic时序2. iic : scl sda 3. Start : scl高电平时 拉低sda 4. 锁存数据 : scl 上升沿 5. ACK :应答 从机拉低sda6. STOP : scl高电平时 拉高 sda 7. Iic通信接口8. 双向IO inout sda; sda = sda_link ? Sda_r : 1bz; sda_link 输入输出控制位 0输入 高阻

10、 读时 赋给某个寄存器 1输出 sda_r输出值内部振荡时钟(MAXII)1. osc_ena内部晶振 使能信号 高电平有效 output :osc 晶振13.33MHz 22.22MHz OSC 是经过4分频的时钟 频率:3.3MHz 5.5MHz2. MAXII内嵌存储器 UFM(内部晶振 flash) 使用晶振时 不需要例化UFM 晶振可单独使用3. .新建工程 ufm_osc 顶层文件 ufm_osc 配置内部振荡器的宏功能在顶层文件中 例化 模块代码示例 仿真 Modelsim1. RTL smulatian 功能仿真 :代码呗 综合过 没有时序信息 库:需要文件: 测试脚本.v +

11、 器件文件.v /硬件信息+ modelsim_test.vo /综合后的网表2. GATE_LEVEL simulatian 时序仿真 仿真时序信息 延时的情况库: 需要文件 : 额外+.sdo/器件延时信息 仿真流程(SE版本): 1. 功能仿真 :新建library 添加文件 (3) 编译 双击xxx_test 右键添加到波形窗口(add to wave)2. 时序仿真 :新建工程(new project) 添加文件(add file to project)(modelsim 3+1) 编译 (compile all) 在库中双击xxx_test 右键添加到波形窗口(add to wave) 仿真 注 : 如果不用时序信息 打开.vo文件 注释掉 调用.sdo 的语句 从新编译 开发流程 DSS与嵌入式逻辑分析仪的调用一DSS1. DSS : 直接数字频率合成器,DDFS。·DSS是从相位的概念直接合成所需波形的一种频率合成技术。·

温馨提示

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

评论

0/150

提交评论