PMODAD1 实现模拟数据的采集 实现篇1
来源:互联网 发布:手机版弘历软件 编辑:程序博客网 时间:2024/06/07 15:16
从硬件篇我们看到一个PMOD模块包含了两路ADC,他们公用SCLK和CSN,只是有两路各自的DATA输出,因此我们将采集模块简单修改一下,能同时采集两路,如下:
module ad7476_sample( input clk,rst, input ADC_sdata0, ADC_sdata1, output reg ADC_sclk,ADC_csn, output reg [11:0] adc_res0, adc_res1, output reg adc_valid ); reg [7:0] cntr ; always @ (posedge clk) //clk 35MHZ if (rst)cntr<=0;else if (cntr == 34) cntr<=0;else cntr<=cntr+1; always @ (posedge clk) case (cntr ) 0: ADC_csn <= 0; 33: ADC_csn <= 1; endcase always @ (posedge clk) case (cntr) //0,1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,34 : 34,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,33 :ADC_sclk<=1; default ADC_sclk<=0; endcase always @ (posedge clk) case (cntr ) 8: adc_res0[11] <= ADC_sdata0 ; 10:adc_res0[10] <= ADC_sdata0 ; 12:adc_res0[9] <= ADC_sdata0 ; 14:adc_res0[8] <= ADC_sdata0 ; 16:adc_res0[7] <= ADC_sdata0 ; 18:adc_res0[6] <= ADC_sdata0 ; 20:adc_res0[5] <= ADC_sdata0 ; 22:adc_res0[4] <= ADC_sdata0 ; 24:adc_res0[3] <= ADC_sdata0 ; 26:adc_res0[2] <= ADC_sdata0 ; 28:adc_res0[1] <= ADC_sdata0 ; 30:adc_res0[0] <= ADC_sdata0 ; endcase always @ (posedge clk) case (cntr ) 8: adc_res1[11] <= ADC_sdata1 ; 10:adc_res1[10] <= ADC_sdata1 ; 12:adc_res1[9] <= ADC_sdata1 ; 14:adc_res1[8] <= ADC_sdata1 ; 16:adc_res1[7] <= ADC_sdata1 ; 18:adc_res1[6] <= ADC_sdata1 ; 20:adc_res1[5] <= ADC_sdata1 ; 22:adc_res1[4] <= ADC_sdata1 ; 24:adc_res1[3] <= ADC_sdata1 ; 26:adc_res1[2] <= ADC_sdata1 ; 28:adc_res1[1] <= ADC_sdata1 ; 30:adc_res1[0] <= ADC_sdata1 ; endcase always @ (posedge clk)adc_valid <= cntr == 32 ;endmodule
我们将PMOD插入JA1,如下图:
直接从图上可以看出引脚对应
CSN->JA1
D0->JA2
D1->JA3
CLK->JA4
之后我们再找找JA引脚对应关系,我在这里拷贝一下:
# PMOD JAset_property -dict {PACKAGE_PIN Y11 IOSTANDARD LVCMOS33} [get_ports pmod_ja1];set_property -dict {PACKAGE_PIN AA11 IOSTANDARD LVCMOS33} [get_ports pmod_ja2];set_property -dict {PACKAGE_PIN Y10 IOSTANDARD LVCMOS33 PULLUP true} [get_ports pmod_ja3];set_property -dict {PACKAGE_PIN AA9 IOSTANDARD LVCMOS33} [get_ports pmod_ja4];set_property -dict {PACKAGE_PIN AB11 IOSTANDARD LVCMOS33} [get_ports pmod_ja7];set_property -dict {PACKAGE_PIN AB10 IOSTANDARD LVCMOS33} [get_ports pmod_ja8];set_property -dict {PACKAGE_PIN AB9 IOSTANDARD LVCMOS33} [get_ports pmod_ja9];set_property -dict {PACKAGE_PIN AA8 IOSTANDARD LVCMOS33} [get_ports pmod_ja10];# PMOD JBset_property -dict {PACKAGE_PIN W12 IOSTANDARD LVCMOS33} [get_ports pmod_jb1];set_property -dict {PACKAGE_PIN W11 IOSTANDARD LVCMOS33} [get_ports pmod_jb2];set_property -dict {PACKAGE_PIN V10 IOSTANDARD LVCMOS33 PULLUP true} [get_ports pmod_jb3];set_property -dict {PACKAGE_PIN W8 IOSTANDARD LVCMOS33} [get_ports pmod_jb4];set_property -dict {PACKAGE_PIN V12 IOSTANDARD LVCMOS33 PULLDOWN true} [get_ports pmod_jb7];set_property -dict {PACKAGE_PIN W10 IOSTANDARD LVCMOS33 PULLDOWN true} [get_ports pmod_jb8];set_property -dict {PACKAGE_PIN V9 IOSTANDARD LVCMOS33 PULLDOWN true} [get_ports pmod_jb9];set_property -dict {PACKAGE_PIN V8 IOSTANDARD LVCMOS33 PULLDOWN true} [get_ports pmod_jb10];# PMOD JCset_property -dict {PACKAGE_PIN AB7 IOSTANDARD LVCMOS33} [get_ports pmod_jc1];set_property -dict {PACKAGE_PIN AB6 IOSTANDARD LVCMOS33} [get_ports pmod_jc2];set_property -dict {PACKAGE_PIN Y4 IOSTANDARD LVCMOS33 PULLUP true} [get_ports pmod_jc3];set_property -dict {PACKAGE_PIN AA4 IOSTANDARD LVCMOS33} [get_ports pmod_jc4];set_property -dict {PACKAGE_PIN R6 IOSTANDARD LVCMOS33} [get_ports pmod_jc7];set_property -dict {PACKAGE_PIN T6 IOSTANDARD LVCMOS33} [get_ports pmod_jc8];set_property -dict {PACKAGE_PIN T4 IOSTANDARD LVCMOS33} [get_ports pmod_jc9];set_property -dict {PACKAGE_PIN U4 IOSTANDARD LVCMOS33} [get_ports pmod_jc10];# PMOD JDset_property -dict {PACKAGE_PIN V7 IOSTANDARD LVCMOS33} [get_ports pmod_jd1];set_property -dict {PACKAGE_PIN W7 IOSTANDARD LVCMOS33} [get_ports pmod_jd2];set_property -dict {PACKAGE_PIN V5 IOSTANDARD LVCMOS33 PULLUP true} [get_ports pmod_jd3];set_property -dict {PACKAGE_PIN V4 IOSTANDARD LVCMOS33} [get_ports pmod_jd4];set_property -dict {PACKAGE_PIN W6 IOSTANDARD LVCMOS33 PULLDOWN true} [get_ports pmod_jd7];set_property -dict {PACKAGE_PIN W5 IOSTANDARD LVCMOS33} [get_ports pmod_jd8];set_property -dict {PACKAGE_PIN U6 IOSTANDARD LVCMOS33} [get_ports pmod_jd9];set_property -dict {PACKAGE_PIN U5 IOSTANDARD LVCMOS33} [get_ports pmod_jd10];
因此我们对应完善一下PMODAD1引脚映射
CSN->JA1->Y11
D0->JA2->AA11
D1->JA3->Y10
CLK->JA4 ->AA9
另外我们将采集到的数值用LED显示,由于只有8位LED,因此我们之考虑显示高8位。上层代码如下:
module PMODAD_LED( input clk,sw0, output reg [7:0] LED , input ADC_sdata0, ADC_sdata1, output ADC_sclk,ADC_csn ); wire clk35M ; design_1_wrapper uu( .clk_in1( clk ) , .clk_out1( clk35M ) ); wire [11:0] adc_res0, adc_res1; wire adc_valid; always @ (posedge clk35M)if (adc_valid) LED <= ( sw0 == 1 ) ? adc_res0[11:4] : adc_res1[11:4] ; ad7476_sample u1( .clk( clk35M ) , .rst( 1'b0 ) , .ADC_sdata0(ADC_sdata0 ) , .ADC_sdata1(ADC_sdata1 ) , .ADC_sclk(ADC_sclk ) , .ADC_csn(ADC_csn ) , .adc_res0(adc_res0 ) , .adc_res1(adc_res1 ) , .adc_valid(adc_valid ) );endmodule
这里使用了一个sw0来切换两路显示。
引脚约束文件如下:
set_property PACKAGE_PIN Y9 [get_ports {clk}]set_property IOSTANDARD LVCMOS33 [get_ports {clk}]set_property PACKAGE_PIN F22 [get_ports {sw0}]set_property IOSTANDARD LVCMOS18 [get_ports {sw0}] set_property PACKAGE_PIN T22 [get_ports {LED[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[0]}]set_property PACKAGE_PIN T21 [get_ports {LED[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[1]}]set_property PACKAGE_PIN U22 [get_ports {LED[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[2]}]set_property PACKAGE_PIN U21 [get_ports {LED[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[3]}]set_property PACKAGE_PIN V22 [get_ports {LED[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[5]}]set_property PACKAGE_PIN W22 [get_ports {LED[5]}]set_property PACKAGE_PIN U19 [get_ports {LED[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {LED[7]}]set_property PACKAGE_PIN U14 [get_ports {LED[7]}]set_property -dict {PACKAGE_PIN Y11 IOSTANDARD LVCMOS33} [get_ports ADC_csn];set_property -dict {PACKAGE_PIN AA11 IOSTANDARD LVCMOS33} [get_ports ADC_sdata0];set_property -dict {PACKAGE_PIN Y10 IOSTANDARD LVCMOS33 } [get_ports ADC_sdata1];set_property -dict {PACKAGE_PIN AA9 IOSTANDARD LVCMOS33} [get_ports ADC_sclk];
下载到ZEBBOARD板子运行,一切正常,输入不同电压值,8个LED作为高8位会有数值的变化。
实验就成功了。另外如果有兴趣的话,可以考虑用ILA连续观测采集电压输入波形。
阅读全文
2 0
- PMODAD1 实现模拟数据的采集 实现篇1
- PMODAD1 实现模拟数据的采集 硬件篇
- PMODAD1 实现模拟数据的采集 时序篇
- 模拟信号量实现传感器的定时采集
- 用msChart6.0控件实现模拟数据采集系统
- 模拟HTTP请求实现网页自动操作及数据采集
- 网页数据采集实现
- php:数据采集的实现的想法
- 用libpcap实现NIDS的数据采集
- VC++实现计算机并口的数据采集
- Delphi实现远程串口的数据采集
- 采集元数据的C++实现
- 一个远程数据采集系统的实现
- JAVA实现数据采集程序的基本原理
- Java实现日志数据的采集显示
- SYSLOG日志数据采集实现
- php实现采集电影数据
- Java实现网页数据采集
- 正则表达式
- 按钮添加简单地烟花特效
- Java 8 实战 -- 函数式数据处理 (二)
- openstack默认的端口号列表
- 使用librtmp库发布直播流
- PMODAD1 实现模拟数据的采集 实现篇1
- 状态栏字体颜色改变
- tcp窗口滑动以及拥塞控制
- 插入排序算法
- 总结-maven-新建web项目
- php7 curl上传文件
- lintcode 415有效回文串(Java)
- 声优陪聊技术支持
- Android ExpandableListView使用小结(二)