下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于XilinxFPGA的通用信号采集器上一篇写了基于XilinxFPGA的通用信号发生器的案例,反响比较好,很多朋友和我探讨相关的技术,其中就涉及到信号的采集,为了使该文更有血有肉,我在写一篇基于XilinxFPGA的通用信号采集器,望能形成呼应,以解答大家的疑问。目的:1.通过设计实现信号采集与分析,掌握组合逻辑设计方法;2.通过设计实现信号的采集与分析,掌握信号采集原理。原理:利用FPGA芯片,用verilog语言编写逻辑,控制AD0809进行AD转换。AD0809是带有8位AD转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件,它是逐次逼近式的AD转换器。AD0809的内部结构图如下:由上图可知,多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用AD转换器进行转换,三态输出锁存器用于锁存AD转换完成后的数字量,当OE为高时才可以从锁存器取出转换后的数据。通道选择如下图所示:START为转换启动信号。当START上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,START应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。时序如下图所示:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254源代码1.Verilog源代码,dataCollect.vmoduledataCollect(sysclk,rst,adda,addb,addc,start,oe,
datain,led_sel,led_seg);
inputsysclk,rst;
inputwire[7:0]datain;
outputregadda,addb,addc,start,oe;
outputreg[3:0]led_sel;
outputreg[7:0]led_seg;
reg[3:0]counter1;
reg[7:0]readdata;
reg[9:0]counter2;
reg[15:0]sum;
reg[7:0]averdata;
reg[7:0]temp;
reg[3:0]dataout1,dataout2,dataout3;
reg[3:0]counter3;
parameterZERO=8'b11111100,ONE=8'b01100000,TWO=8'b11011010;
parameterTHREE=8'b11110010,FOUR=8'b01100110;
parameterFIVE=8'b10110110,SIX=8'b10111110,SEVEN=8'b11100000;
parameterEIGHT=8'b11111110,NINE=8'b11110110,BLANK=8'b00000000;
always@(posedgesysclkornegedgerst)
begin
if(!rst)
begin
adda=0;
addb=0;
addc=0;
oe=1;
counter1=0;
end
else
begin
counter1=counter1+1;
case(counter1)
3:start=0;
4:start=1;
5:start=0;
10:readdata=datain;
15:counter1=0;
default:counter1=counter1;
endcase
end
end
always@(posedgesysclkornegedgerst)
begin
if(!rst)
begin
counter2=0;
sum=0;
averdata=0;
end
else
begin
counter2=counter2+1;
if((counter2%16)==0)
sum=sum+readdata;
elseif(counter2>512)
begin
averdata=sum/32;
sum=0;
counter2=0;
end
end
end
always@(averdata)
begin
temp=averdata;
if(temp>199)
dataout3=2;
elseif(temp>99)
dataout3=1;
else
dataout3=0;
temp=temp-dataout3*100;
if(temp>89)
dataout2=9;
elseif(temp>79)
dataout2=8;
elseif(temp>69)
dataout2=7;
elseif(temp>59)
dataout2=6;
elseif(temp>49)
dataout2=5;
elseif(temp>39)
dataout2=4;
elseif(temp>29)
dataout2=3;
elseif(temp>19)
dataout2=2;
elseif(temp>9)
dataout2=1;
else
dataout2=0;
temp=temp-dataout2*10;
dataout1=temp;
if((dataout3==0)&&(dataout2==0))
begin
dataout3=10;
dataout2=10;
end
elseif(dataout3==0)
dataout3=10;
else
dataout3=dataout3;
end
always@(posedgesysclkornegedgerst)
begin
if(!rst)
begin
counter3=0;
led_sel=4'b0001;
end
else
begin
if(counter3==4)
begin
counter3=0;
if(led_sel==4'b1000)
led_sel=4'b0001;
else
led_sel=led_sel<<1;
end
counter3=counter3+1;
end
end
always@(led_sel,dataout1,dataout2,dataout3)
begin
case(led_sel)
4'b0001:
begin
case(dataout1)
0:led_seg=ZERO;
1:led_seg=ONE;
2:led_seg=TWO;
3:led_seg=THREE;
4:led_seg=FOUR;
5:led_seg=FIVE;
6:led_seg=SIX;
7:led_seg=SEVEN;
8:led_seg=EIGHT;
9:led_seg=NINE;
default:led_seg=BLANK;
endcase
end
4'b0010:
begin
case(dataout2)
0:led_seg=ZERO;
1:led_seg=ONE;
2:led_seg=TWO;
3:led_seg=THREE;
4:led_seg=FOUR;
5:led_seg=FIVE;
6:led_seg=SIX;
7:led_seg=SEVEN;
8:led_seg=EIGHT;
9:led_seg=NINE;
default:led_seg=BLANK;
endcase
end
4'b0100:
begin
case(dataout3)
0:led_seg=ZERO;
1:led_seg=ONE;
2:led_seg=TWO;
3:led_seg=THREE;
4:led_seg=FOUR;
5:led_seg=FIVE;
6:led_seg=SIX;
7:led_seg=SEVEN;
8:led_seg=EIGHT;
9:led_seg=NINE;
default:led_seg=BLANK;
endcase
end
4'b1000:
begin
case(10)
0:led_seg=ZERO;
1:led_seg=ONE;
2:led_seg=TWO;
3:led_seg=THREE;
4:led_seg=FOUR;
5:led_seg=FIVE;
6:led_seg=SIX;
7:led_seg=SEVEN;
8:led_seg=EIGHT;
9:led_seg=NINE;
default:led_seg=BLANK;
endcase
end
default:
begin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度成品油运输合同模板(绿色包装)3篇
- 2025年度个人自用房产转让合同范本
- 二零二五年度车辆转让与维修服务合同4篇
- 2025年度电子元器件可靠性测试服务合同3篇
- 2025版学生交通安全责任及服务协议汇编2篇
- 2025中国银行流动资金外汇借贷合同
- 二零二五年度网红餐厅IP授权合作合同3篇
- 二零二五年度船舶建造与海难救助合作协议3篇
- 2025年度酒吧吧台承包与酒吧广告投放合同4篇
- 专项尽职调查法律合作合同(2024年版)版
- 2025-2030年中国陶瓷电容器行业运营状况与发展前景分析报告
- 让学生看见你的爱
- 12123交管学法减分练习题及答案二(带图文通用版)
- 销售礼盒营销方案
- 南浔至临安公路(南浔至练市段)公路工程环境影响报告
- 初中数学校本教材(完整版)
- 重庆市铜梁区2024届数学八上期末检测试题含解析
- 中央导管相关血流感染防控
- 光的偏振和晶体光学基础课件
- 中科大光学讲义08光的偏振
- 黑布林英语阅读《小妇人》-中英伴读
评论
0/150
提交评论