用FPGA给AD和DA编程的一些问题(verilog)
我一直有些疑惑,用FPGA给AD和DA进行编程的时候,module中的input和output是指AD模块的input和output还是指FPGA芯片的input和out...
我一直有些疑惑,用FPGA给AD和DA进行编程的时候,module中的input和output是指AD模块的input和output还是指FPGA芯片的input和output?我附上一段代码,求解答!
module adc(clock,reset,enable,sdat_in,adc_clk,cs_n,data_ready,data_out);
//I/O口声明
input clock; //系统时钟
input reset; //复位,高电平有效
input enable; //转换使能
input sdat_in; //TLC549串行数据输入
output adc_clk; //TLC549 I/O时钟
output cs_n; //TLC549 片选控制
output data_ready; //指示有新的数据输出
output[7:0] data_out; //AD转换数据输出
//I/O寄存器
reg adc_clk_r;
reg cs_n_r;
reg data_ready_r;
reg[7:0] data_out_r; //AD转换数据输出
reg sdat_in_r; //数据输出锁存
//内部寄存器
reg[7:0]q; //移位寄存器,用于接收或发送数据
reg[2:0]adc_state; //状态机ADC
reg[2:0]adc_next_state;
reg[5:0]bit_count; //移位计数器
reg bit_count_rst; //ADC时钟计数器全能控制
reg div_clk;
reg[CLK_DIV_BITS-1:0] clk_count;//时钟分频计数器
reg buf1,buf2;
//内部信号
wire ready_done; //cs_n拉低(大于1.4us)后的标志
wire rec_done; //数据读取完毕的标志
wire conv_done; //数据转换完毕的标志
//计时器参数
parameter CLK_DIV_VALUE = 31; //ADC时钟计数器(大于404nS)计数值
parameter CLK_DIV_BITS = 5; //ADC时钟计数器位宽
//状态机M1状态参数表
parameter idle = 3'b000,
adc_ready = 3'b001,
adc_receive = 3'b011,
adc_conversion = 3'b010,
adc_data_load = 3'b110;
//**********************************************************
//I/O寄存器输出
assign adc_clk = adc_clk_r;
assign cs_n = cs_n_r;
assign data_out = data_out_r;
assign data_ready = data_ready_r;
//同步输入数据信号
always @(posedge clock)
begin
sdat_in_r <= sdat_in;
end
//**********************************************************
//时钟分频计数器
always @(posedge clock)
begin
if (reset == 1'b1)
clk_count <= 5'd0;
else
begin
if (clk_count < CLK_DIV_VALUE)
begin
clk_count <= clk_count + 1'b1;
div_clk <= 1'b0;
end
else
begin
clk_count <= 5'd0;
div_clk <= 1'b1;
end
end
end 展开
module adc(clock,reset,enable,sdat_in,adc_clk,cs_n,data_ready,data_out);
//I/O口声明
input clock; //系统时钟
input reset; //复位,高电平有效
input enable; //转换使能
input sdat_in; //TLC549串行数据输入
output adc_clk; //TLC549 I/O时钟
output cs_n; //TLC549 片选控制
output data_ready; //指示有新的数据输出
output[7:0] data_out; //AD转换数据输出
//I/O寄存器
reg adc_clk_r;
reg cs_n_r;
reg data_ready_r;
reg[7:0] data_out_r; //AD转换数据输出
reg sdat_in_r; //数据输出锁存
//内部寄存器
reg[7:0]q; //移位寄存器,用于接收或发送数据
reg[2:0]adc_state; //状态机ADC
reg[2:0]adc_next_state;
reg[5:0]bit_count; //移位计数器
reg bit_count_rst; //ADC时钟计数器全能控制
reg div_clk;
reg[CLK_DIV_BITS-1:0] clk_count;//时钟分频计数器
reg buf1,buf2;
//内部信号
wire ready_done; //cs_n拉低(大于1.4us)后的标志
wire rec_done; //数据读取完毕的标志
wire conv_done; //数据转换完毕的标志
//计时器参数
parameter CLK_DIV_VALUE = 31; //ADC时钟计数器(大于404nS)计数值
parameter CLK_DIV_BITS = 5; //ADC时钟计数器位宽
//状态机M1状态参数表
parameter idle = 3'b000,
adc_ready = 3'b001,
adc_receive = 3'b011,
adc_conversion = 3'b010,
adc_data_load = 3'b110;
//**********************************************************
//I/O寄存器输出
assign adc_clk = adc_clk_r;
assign cs_n = cs_n_r;
assign data_out = data_out_r;
assign data_ready = data_ready_r;
//同步输入数据信号
always @(posedge clock)
begin
sdat_in_r <= sdat_in;
end
//**********************************************************
//时钟分频计数器
always @(posedge clock)
begin
if (reset == 1'b1)
clk_count <= 5'd0;
else
begin
if (clk_count < CLK_DIV_VALUE)
begin
clk_count <= clk_count + 1'b1;
div_clk <= 1'b0;
end
else
begin
clk_count <= 5'd0;
div_clk <= 1'b1;
end
end
end 展开
1个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
不需要分析什么程序。。
你只要记住,FPGA里面的输入输出都是以FPGA的芯片为第一人称来讲的。只要记住就可以了。。
通俗讲就是芯片内部往外输出信号就是output,外面的信号往芯片内部输入就是input。
举个例子,你的主时钟50MHZ,是在芯片外面的晶振把信号输入进来,所以clk就是input。
外围的ic器件的分析都是一样的。。
你只要记住,FPGA里面的输入输出都是以FPGA的芯片为第一人称来讲的。只要记住就可以了。。
通俗讲就是芯片内部往外输出信号就是output,外面的信号往芯片内部输入就是input。
举个例子,你的主时钟50MHZ,是在芯片外面的晶振把信号输入进来,所以clk就是input。
外围的ic器件的分析都是一样的。。
追问
那么,假如说我的module AD();中有一条语句是output DATA;那么这条语句一定是FPGA输出的吧?我的FPGA输出这个AD后的数字量有什么用呢?我是把这个数字量返回给了AD芯片还是可以用于DA转换回模拟量?
追答
对是FPGA的输出,不过输出也可以分为内部的输出和外部端口的输出。。
你用AD芯片不就是为了采集模拟量吗?但是数字器件不识别模拟量,所以转化为数字量再采集。
而这些采集的数字量这就是你AD中的那个output DATA,这个output就看你自己的程序具体要干什么了。
比如你可以把这个output当做FPGA内部的输出端口,也就是输入到你工程中另一个模块,比如lcd1602,经过简单的转换就可以在你lcd上显示你采集到的模拟量是多少了。
还有就像你说的,也可以作为FPGA外部输出端口,直接再转给你的DA输出。波形的采集和输出就可以这样做,中间加个存储就可以了。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询