基于FPGA的数字电压表设计

基于FPGA的数字电压表设计
本文代码数据处理模块参照大佬设计:https://blog.csdn.net/aodan3459/article/details/102011527?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159469213619725222417809%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159469213619725222417809&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_blog_default-2-102011527.pc_v2_rank_blog_default&utm_term=FPGA%E6%95%B0%E5%AD%97%E7%94%B5%E5%8E%8B%E8%A1%A8,
感谢大佬,侵删。

参考文献:
1.《现代数字电子技术基础实践》陈龙 牛小燕 马学条 杨柳 编著 机械工业出版社
2.《EDA Technology and Verilog HDL》黄继业 郑兴 黄汐威 潘松 编著 清华大学出版社
3.《Verilog HDL与FPGA数字系统设计》罗杰 主编 机械工业出版社

开发板资料:
1.AX301B_UG.pdf
2.高速ADDA使用指南REV1.3.pdf
3.黑金Altera开发板AX301_AX4010Verilog实例教程.pdf
以上资料均来自黑金动力社区:http://www.heijin.org/
*

一、设计指标:
(1)使用ALINX AX301 FPGA开发平台。
(2)使用ALINX AN108 AD/DA模块。
(3)通过DA部分AD9708芯片产生固定模拟电压信号。
(4)通过AD部分AD9280芯片将模拟信号转化为数字信号。
(5)数码管显示所测电压值,分辨率0.01V,并且负电压可以显示负号。
(6)量程为 -4.00到4.00V。

二、系统框图:
1.
三、代码部分:
1.顶层模块:
使用“例化”方式连接各个模块。

module adc9280_top(
						//input
						sys_clk,		//系统时钟50MHz
						rst_n,		//复位信号
                  data_ad,		//AD输出信号
                     
                  //output									
                  clk_adc,		//ADC时钟
						clk_dac,		//DAC时钟
						data_da,		//DA输出信号
                  wei_slec,	//数码管位选信号
                  duan_slec	//数码管段选信号
                  );
						
input sys_clk;
input rst_n;
input [7:0] data_ad;

output clk_adc;
output clk_dac;
output [7:0] data_da;
output [3:0] wei_slec;
output [7:0] duan_slec;

wire [7:0] pre_data;
wire [11:0] cout;

//分频器模块
clk_10M	u1(
				//input
				.sys_clk(sys_clk),
				.rst_n(rst_n),
				
				//ouput
				.clk_10M(clk_10M)
				);

//ADC采样模块			
ADC9280	u2(
				//input
				.sys_clk(sys_clk),
				.data_ad(data_ad),
				
				//ouput
				.pre_data(pre_data)
				);

//数据处理模块
data_ad_pro	u3(
					//input 
					.sys_clk(sys_clk),
					.rst_n(rst_n),
					.pre_data(pre_data),
                 
					//output
					.cout(cout)
					);

//数码显示译码模块				
display	u4(
				//input 
				.sys_clk(sys_clk),
				.rst_n(rst_n),
				.cout(cout),
                 
				//output			
				.slec_wei(wei_slec),
				.slec_duan(duan_slec)
				);

//信号发生模块
signal_generator u5(
							//input
							.sys_clk(sys_clk),
							.rst_n(rst_n),
							
							//output
							.data_da(data_da)
						);

assign clk_adc = clk_10M;
assign clk_dac = sys_clk;
endmodule

2.分频器模块:
AD9280最大采样率为32MSPS,使用10MHz时钟比较合适。

module clk_10M(
						//input
						sys_clk,		//输系统时钟50MHz
						rst_n,		//复位信号
						
						//ouput	
						clk_10M		//输出分频后的时钟10MHz
					);

input sys_clk;
input rst_n;

output clk_10M;

reg clk_10M;
reg [2:0]cnt;		//计数信号

always @(posedge sys_clk or negedge rst_n)
 if(!rst_n) begin
     cnt  <= 5'd0;
     clk_10M <= 1'b0;
 end
 else if(cnt == 5'd5)		//5分频,系统时钟每翻转5次,clk_10M翻转一次
 begin
     cnt <= 5'd0;
     clk_10M <= ~clk_10M;
 end
 else
     cnt <= cnt + 1'b1;
endmodule

3.ADC采样模块:

module ADC9280(
						//input
						sys_clk,		
  • 11
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值