- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四用状态机实现ADC采样电路设计
实验四 用状态机实现ADC的采样电路设计
实验目的
1、用状态机实现ADC的采样控制电路
2、熟悉QuartusⅡ软件应用环境,了解实验流程。
3、编写简单的Verilog代码,在QuartusⅡ中进行调试和验证,并在magic sopc中下载代码和验证。
二、实验器材
QutersII软件、magic sopc实验箱、电脑
三、实验原理
TLC549是一个8位的串行模数转换器,AD转换时间最大17微秒,I/O时钟可达1.1MHz。
如图21.1所示为TLC549的访问时序,从图中可以看由当CS/拉低时,ADC前一次的转换数据(A)的最高位A7立即出现在数据线DATA OUT上,之后的数据在时钟I/O CLOCK的下降沿改变,可在I/O CLOCK的上升沿读取数据。读完8位数据后,ADC开始转换这一次采样的信号(B),以便下一次读取。转换时片选信号CS/要置高电平。设计操作时序是要注意Tsu(CS)、Tconv及I/O CLOCK的频率几个参数。Tsu(CS)为CS/拉低到I/O CLOCK 第一个时钟到来时间,至少要1.4 秒;Tconv 为ADC的转换时钟,不超过17微秒;
由于ADC是8位的,所以采样的电压值为: V=(D/256)*Vref 其中V 为采样的电压值,D为ADC 转换后读取的8 位二进制数,Vref 为参考电压值,这里是2.5V。
四、实验步骤
步骤1.新建一个文件夹打开vhdl文件
步骤2:编写源程序并保存
module scan_led(clk_1k,d,dig,seg); //模块名scan_led
input clk_1k; //输入时钟
input[31:0] d; //输入要显示的数据
output[7:0] dig; //数码管选择输出引脚
output[7:0] seg; //数码管段输出引脚
reg[7:0] seg_r; //定义数码管输出寄存器
reg[7:0] dig_r; //定义数码管选择输出寄存器
reg[3:0] disp_dat; //定义显示数据寄存器
reg[2:0]count; //定义计数寄存器
assign dig = dig_r; //输出数码管选择
assign seg = seg_r; //输出数码管译码结果
always @(posedge clk_1k) //定义上升沿触发进程
begin
count = count + 1b1;
end
always @(posedge clk_1k)
begin
case(count) //选择扫描显示数据
3d0:disp_dat = d[31:28]; //第一个数码管
3d1:disp_dat = d[27:24]; //第二个数码管
3d2:disp_dat = d[23:20]; //第三个数码管
3d3:disp_dat = d[19:16]; //第四个数码管
3d4:disp_dat = d[15:12]; //第五个数码管
3d5:disp_dat = d[11:8]; //第六个数码管
3d6:disp_dat = d[7:4]; //第七个数码管
3d7:disp_dat = d[3:0]; //第八个数码管
default:disp_dat = 0;
endcase
case(count) //选择数码管显示位
3d0:dig_r = 8 //no选择第一个数码管显示
3d1:dig_r = 8 //no选择第二个数码管显示
3d2:dig_r = 8 //no选择第三个数码管显示
3d3:dig_r = 8 //no选择第四个数码管显示
3d4:dig_r = 8 //no选择第五个数码管显示
3d5:dig_r = 8 //no选择第六个数码管显示
3d6:dig_r = 8 //选择第七个数码管显示
3d7:dig_r = 8 //选择第八个数码管显示
default:dig_r = 8
endcase
end
always @(disp_dat)
begin
case(disp_dat) //七段译码
4h0:seg_r = 8hc0; //显示0
4h1:seg_r = 8hf9
文档评论(0)