调一个cpld小板
来源:互联网 发布:python数据分析 视频 编辑:程序博客网 时间:2024/05/16 05:53
通过一个小项目,演示工程创建->仿真->下载的整个流程,涉及QuartusII,ISE,ModelSim的使用。
起因
刚刚帮朋友调了一个cpld小板,正好可以当做例程,把开发流程记录一下。
注:下面的项目需求经过了改造,不同于真实的项目需求
项目示例
原理图
系统输入信号:
- 时钟
- 8位宽总线
- 总线地址写使能
- 总线数据写使能
- 8位宽地址,接板上的拨码开关
系统输出信号:
- 8位并口输出
功能描述
此cpld小板作为执行器,应用时会有多个cpld挂在同一条总线上,外部有控制器。控制器每次发送一个8位地址,后跟一个8位数据,分别对应地址写使能和数据写使能。cpld小板的地址由拨码开关设定,当地址匹配时,保存数据,在延时一段时间后以数据为初始计数值递减,直至为0,改计数值就是cpld的输出。
Verilog HDL 程序
top_level.v
module top_level(clk, wa, wd, id, bus, out);input clk, wa, wd;input[7:0] id;input[7:0] bus;output[7:0] out;reg[7:0] out;reg[1:0] wa_buf;reg[1:0] wd_buf;reg id_match;reg[3:0] dly_cnt;initialbegin out = 0; wa_buf = 0; wd_buf = 0; id_match = 0; dly_cnt = 0;endalways @(posedge clk)begin wa_buf[0] <= wa; wa_buf[1] <= wa_buf[0]; wd_buf[0] <= wd; wd_buf[1] <= wd_buf[0];endalways @(posedge clk)begin if ((id==bus)&&(wa_buf==2'b10)) id_match <= 1'b1; else if (dly_cnt[3:0] == 4'b0001) id_match <= 1'b0; else id_match <= id_match;endalways @(negedge clk)begin if ((id_match==1'b1)&&(wd_buf==2'b10)) dly_cnt <= 4'b1001; else if (dly_cnt == 0) dly_cnt <= 0; else dly_cnt <= dly_cnt - 1;endalways @(negedge clk)begin if ((id_match==1'b1)&&(wd_buf==2'b10)) out <= bus; else if ((dly_cnt <= 4'b0010)&&(out != 0)) out <= out - 1; else out <= out;endendmodule
test.v
`timescale 1ns/1nsmodule test; reg clk_in, wa, wd; reg[7:0] id; reg[7:0] bus; wire[7:0] out; initial begin wa = 1; wd = 1; clk_in = 1; bus[7:0] = 8'b00000000; //拨码开关 id[7:0] = 8'b00000000; //测试1:错误地址 //总线 #100 bus[7:0] = 8'b00000001; //写地址 #100 wa = 0; #100 wa = 1; //总线 #200 bus[7:0] = 8'b01010101; //写数据 #100 wd = 0; #100 wd = 1; //测试2:正确地址,计数值为0x55 //总线 #100 bus[7:0] = 8'b00000000; //写地址 #100 wa = 0; #100 wa = 1; //总线 #200 bus[7:0] = 8'b01010101; //写数据 #100 wd = 0; #100 wd = 1; //写地址 #100 wa = 0; #100 wa = 1; //测试3:正确地址,计数值为0x0f //总线 #200 bus[7:0] = 8'b00001111; //写数据 #100 wd = 0; #100 wd = 1; end always #50 clk_in <= ~clk_in; top_level obj(clk_in, wa, wd, id, bus, out);endmodule
仿真(ModelSim SE 10.0c)
新建library,名称默认为work
新建project添加到work库,名称随意
因为已经准备好了top_level.v和test.v两个文件,选择“添加已存在文件”
添加完成,注意左下角的2个标签页,当前处于project
双击文件名可以打开编辑窗口
文件名上右键,选择编译;可以编译选中文件、全部文件、查看报表;当编译出现错误时应查看报表
编译成功后,文件状态为绿色对勾,下面的脚本窗口也有文本提示
选择library标签页,展开work库,选中test并右键选择Simulate
上述操作后会打开很多新界面。
在Objects页面内,是仿真对象的信号,全选,右键添加到Wave窗口
simulate工具条改为4 us,并run
得到仿真时序
下载(ISE Design Suite 14.7)
待整理
下载(Quartus II 11.0)
待整理
0 0
- 调一个cpld小板
- 今天布了一个ATmega8核心小板
- CPLD
- CPLD
- RS232 小板测试
- 什么是CPLD
- 什么是CPLD
- 什么是CPLD
- 什么是CPLD
- CPLD--verilog
- 什么是CPLD
- CPLD FPGA
- CPLD 是什么?
- 中升级小板改制记升级小板星9号
- AVR-4 自制 mega16 小板
- 2.54转2.0小板改造
- 用openocd+jtag并口小板调试qq2440
- 自制的ISD语音调试小板
- 一个与map下标操作有关的编译错误(花了5分钟才找到原因)
- FragmentManager的使用注意事项
- ScrollView嵌套ListView(ViewGroup事件分发)
- 老板说做SEO只是发外链写软文的,怎么破?
- 欢迎使用CSDN-markdown编辑器
- 调一个cpld小板
- 关于Unity3D(4.7和5.3.4)与IOS原生Object-C交互,调用IOS原生UIImagePickerController的问题
- Eclipse 窗口,视图 说明
- Mysql -update - Error Code: 1175. You are using safe update mode and you tried to update a table wit
- Ext.grid.plugin.RowExpander的使用
- android list比较字符串并排序
- The Ultimate List of 300+ Computer Vision Resources
- 第八周oj3
- DevOps数据中心