如何将 FPGA 的数字输出接口连接到 DAC?
How to interface digital output of FPGA to a DAC?
我目前有一个非常非常基本的 DDS 内核(?),带有计数器、调谐字和正弦 LUT,可输出 16 位值以与 DAC 的正弦值相关联。我使用的Nexys 4 DDR board and my DAC是专为FPGA设计的外设模块。 如果是16位DAC,为什么它有6个引脚,其中只有4个用于数据?我应该如何将我生成的 16 位 sin 值的二进制信息发送到 DAC,以便 DAC 进行成功转换?
这是我的代码(我知道它很初级,请原谅错误,我会在我正确了解如何与DAC交互后解决它们!)
module sin_LUT(
input clk,
input [0:3] M,
input rst,
output reg [16:0] data_out,
output reg [32:0]test
);
//counter
//declaring constant
integer i;
integer int_M;
always @(M)
int_M = M;
always @(posedge(clk))
begin
if (rst)
i <= 0;
else if (i >= 29)
i <= 0;
else
i <= i + M;
end
//testing purposes
always @(i)
test = i;
//sine LUT
always @(i) begin
case (i)
0: data_out = 16'D32768;
1: data_out = 16'D39812;
2: data_out = 16'D46526;
3: data_out = 16'D52598;
4: data_out = 16'D57742;
5: data_out = 16'D61718;
6: data_out = 16'D64341;
7: data_out = 16'D65487;
8: data_out = 16'D65103;
9: data_out = 16'D63208;
10: data_out = 16'D59889;
11: data_out = 16'D55302;
12: data_out = 16'D49661;
13: data_out = 16'D43230;
14: data_out = 16'D36310;
15: data_out = 16'D29225;
16: data_out = 16'D22305;
17: data_out = 16'D15874;
18: data_out = 16'D10233;
19: data_out = 16'D5646;
20: data_out = 16'D2327;
21: data_out = 16'D432;
22: data_out = 16'D48;
23: data_out = 16'D1194;
24: data_out = 16'D3817;
25: data_out = 16'D7793;
26: data_out = 16'D12937;
27: data_out = 16'D19009;
28: data_out = 16'D25723;
29: data_out = 16'D32768;
default: data_out = 16'b0000111100001111;
endcase
end
endmodule
此 DAC 板的数据表说它使用 Analog Devices AD5541 DAC:
http://www.analog.com/en/products/digital-to-analog-converters/da-converters/ad5541a.html
产品页面还有 link DAC 数据表。从这个数据表中,我提取了以下信息:这个东西使用 SPI 接口。 select 线 (CS),您将其拉低以指示要向其发送数据的 DAC。 data 行 (DIN),每个位都显示在该行中。还有一条时钟线(SCLK),它使DAC在数据线从低电平变为高电平的那一刻从数据线上读取一位。
这是时序图
LDAC 输入,如果拉低,则告诉 DAC 在串行数据寄存器的每次更新时输出。
在开发电子产品时,能够获取并阅读文档是最重要的。我已经在各种项目中使用了几个不同的 SPI DAC,还有一些来自 AD。但不是 AD5541。但是上面的整个答案我使用了我通过阅读相关数据表几分钟获得的信息。如果编程 FPGA 是你的事,你绝对必须培养这样的技能。
我目前有一个非常非常基本的 DDS 内核(?),带有计数器、调谐字和正弦 LUT,可输出 16 位值以与 DAC 的正弦值相关联。我使用的Nexys 4 DDR board and my DAC是专为FPGA设计的外设模块。 如果是16位DAC,为什么它有6个引脚,其中只有4个用于数据?我应该如何将我生成的 16 位 sin 值的二进制信息发送到 DAC,以便 DAC 进行成功转换?
这是我的代码(我知道它很初级,请原谅错误,我会在我正确了解如何与DAC交互后解决它们!)
module sin_LUT(
input clk,
input [0:3] M,
input rst,
output reg [16:0] data_out,
output reg [32:0]test
);
//counter
//declaring constant
integer i;
integer int_M;
always @(M)
int_M = M;
always @(posedge(clk))
begin
if (rst)
i <= 0;
else if (i >= 29)
i <= 0;
else
i <= i + M;
end
//testing purposes
always @(i)
test = i;
//sine LUT
always @(i) begin
case (i)
0: data_out = 16'D32768;
1: data_out = 16'D39812;
2: data_out = 16'D46526;
3: data_out = 16'D52598;
4: data_out = 16'D57742;
5: data_out = 16'D61718;
6: data_out = 16'D64341;
7: data_out = 16'D65487;
8: data_out = 16'D65103;
9: data_out = 16'D63208;
10: data_out = 16'D59889;
11: data_out = 16'D55302;
12: data_out = 16'D49661;
13: data_out = 16'D43230;
14: data_out = 16'D36310;
15: data_out = 16'D29225;
16: data_out = 16'D22305;
17: data_out = 16'D15874;
18: data_out = 16'D10233;
19: data_out = 16'D5646;
20: data_out = 16'D2327;
21: data_out = 16'D432;
22: data_out = 16'D48;
23: data_out = 16'D1194;
24: data_out = 16'D3817;
25: data_out = 16'D7793;
26: data_out = 16'D12937;
27: data_out = 16'D19009;
28: data_out = 16'D25723;
29: data_out = 16'D32768;
default: data_out = 16'b0000111100001111;
endcase
end
endmodule
此 DAC 板的数据表说它使用 Analog Devices AD5541 DAC:
http://www.analog.com/en/products/digital-to-analog-converters/da-converters/ad5541a.html
产品页面还有 link DAC 数据表。从这个数据表中,我提取了以下信息:这个东西使用 SPI 接口。 select 线 (CS),您将其拉低以指示要向其发送数据的 DAC。 data 行 (DIN),每个位都显示在该行中。还有一条时钟线(SCLK),它使DAC在数据线从低电平变为高电平的那一刻从数据线上读取一位。
这是时序图
LDAC 输入,如果拉低,则告诉 DAC 在串行数据寄存器的每次更新时输出。
在开发电子产品时,能够获取并阅读文档是最重要的。我已经在各种项目中使用了几个不同的 SPI DAC,还有一些来自 AD。但不是 AD5541。但是上面的整个答案我使用了我通过阅读相关数据表几分钟获得的信息。如果编程 FPGA 是你的事,你绝对必须培养这样的技能。