网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月15日漏签0天
fpga吧 关注:22,513贴子:70,397
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 7回复贴,共1页
<<返回fpga吧
>0< 加载中...

Verilog实现FPGA和DDS AD9838的通讯的有个问题请教一下

  • 只看楼主
  • 收藏

  • 回复
  • 赏金猎人的悲伤
  • fpga小班
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我使用Verilog写的状态机实现3线SPI控制AD9838(是28位的DDS,控制端是16位数据输入)。目前出现一个问题,我用parameter 在模块里面写了3个data:data1是写寄存器的值,data2是28位频率控制字数据的低14位,data3是28位频率控制字的高14位(16位数据前2位用来片选),结果输出正弦波的频率是没问题的;但是我把模块改了一下,三个data通过ISE里面的constant的方式接在模块的输出端口,输出频率和我计算的就不一样了,不知道为什么!!!


  • baby张在刚
  • fpga逛吧
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用TI的那个软件可能有BUG,你要自己看文档,有的时候那个软件数据不太对,你看着是对的,实际上出来就不对了,


2025-07-15 15:32:30
广告
  • 赏金猎人的悲伤
  • fpga小班
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
那我看看,结果示波器量出来不对,我觉的两个代码一样的,结果不一样


  • 赏金猎人的悲伤
  • fpga小班
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我代码发一下你看看


  • 赏金猎人的悲伤
  • fpga小班
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
module spi4(clk100M,reset,CSB_N,sdo,sclk
);
input clk100M;
input reset;
output CSB_N;
output sclk;
output sdo;
reg CSB_N;
reg sclk;
reg sdo;
reg [2:0] cntclk;
always @(negedge clk100M)
if(reset)
begin
sclk<=1'b0;
cntclk<=3'd4;
end
else
begin
cntclk<=cntclk+1'b1;
sclk<=cntclk[2];
end
parameter data1 =16'b0010000000111000;
parameter data2 =16'b0100101000111101;
parameter data3 =16'b0100111101011100;
reg [3:0] cnt_data1;
reg [3:0] cnt_data2;
reg [3:0] cnt_data3;
reg [3:0] state_data;
always @(negedge clk100M)
begin
if(reset)
begin
state_data<=4'd0;
end
else
case(state_data)
4'd0 : begin
CSB_N <=1'b1;
sdo<= 1'b1;
cnt_data1<=4'd15;
cnt_data2<=4'd15;
cnt_data3<=4'd15;
state_data<=4'd1;
end
4'd1: begin
if(cntclk==3'd4)
begin
CSB_N<=1'd0;
sdo<=data1[cnt_data1];
if(cnt_data1==4'd0)
begin
cnt_data1<=4'd15;
state_data<=4'd2;
end
else
cnt_data1<=cnt_data1-1;
end
end
4'd2: begin
if(cntclk==3'd4)
begin
CSB_N <=1'b1;
state_data<=4'd3;
end
end
4'd3: begin
if(cntclk==3'd4)
begin
CSB_N <=1'd0;
sdo<=data2[cnt_data2];
if(cnt_data2==4'd0)
begin
cnt_data1<=4'd15;
state_data<=4'd4;
end
else
cnt_data2<=cnt_data2-1;
end
end
4'd4: begin
if(cntclk==3'd4)
begin
CSB_N<=1'b1;
state_data<=4'd5;
end
end
4'd5: begin
if(cntclk==3'd4)
begin
CSB_N<=1'd0;
sdo<=data3[cnt_data3];
if(cnt_data3==4'd0)
begin
cnt_data3<=4'd15;
state_data<=4'd6;
end
else
cnt_data3<=cnt_data3-1;
end
end
4'd6: begin
if(cntclk==3'd4)
begin
CSB_N<=1'b1;
end
end
endcase
end
endmodule
module clk_8(reset,F100M,F12M
);
input F100M,reset;
output F12M;
reg F12M;
reg[9:0]j;
always @(posedge F100M)
if(!reset)
begin
j<=0;
F12M<=0;
end
else
begin
if(j==3)
begin
j<=0;
F12M<=~F12M;
end
else
j<=j+1;
end
endmodule


  • 赏金猎人的悲伤
  • fpga小班
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
module spi4(clk100M,reset,CSB_N,sdo,sclk,data1,data2,data3
);
input clk100M;
input reset;
input [15:0] data1;
input [15:0] data2;
input [15:0] data3;
output CSB_N;
output sclk;
output sdo;
reg CSB_N;
reg sclk;
reg sdo;
reg [2:0] cntclk;
always @(negedge clk100M)
if(reset)
begin
sclk<=1'b0;
cntclk<=3'd4;
end
else
begin
cntclk<=cntclk+1'b1;
sclk<=cntclk[2];
end
reg [3:0] cnt_data1;
reg [3:0] cnt_data2;
reg [3:0] cnt_data3;
reg [3:0] state_data;
always @(negedge clk100M)
begin
if(reset)
begin
state_data<=4'd0;
end
else
case(state_data)
4'd0 : begin
CSB_N <=1'b1;
sdo<= 1'b1;
cnt_data1<=4'd15;
cnt_data2<=4'd15;
cnt_data3<=4'd15;
state_data<=4'd1;
end
4'd1: begin
if(cntclk==3'd4)
begin
CSB_N<=1'd0;
sdo<=data1[cnt_data1];
if(cnt_data1==4'd0)
begin
cnt_data1<=4'd15;
state_data<=4'd2;
end
else
cnt_data1<=cnt_data1-1;
end
end
4'd2: begin
if(cntclk==3'd4)
begin
CSB_N <=1'b1;
state_data<=4'd3;
end
end
4'd3: begin
if(cntclk==3'd4)
begin
CSB_N <=1'd0;
sdo<=data2[cnt_data2];
if(cnt_data2==4'd0)
begin
cnt_data1<=4'd15;
state_data<=4'd4;
end
else
cnt_data2<=cnt_data2-1;
end
end
4'd4: begin
if(cntclk==3'd4)
begin
CSB_N<=1'b1;
state_data<=4'd5;
end
end
4'd5: begin
if(cntclk==3'd4)
begin
CSB_N<=1'd0;
sdo<=data3[cnt_data3];
if(cnt_data3==4'd0)
begin
cnt_data3<=4'd15;
state_data<=4'd6;
end
else
cnt_data3<=cnt_data3-1;
end
end
4'd6: begin
if(cntclk==3'd4)
begin
CSB_N<=1'b1;
end
end
endcase
end
endmodule
module clk_8(reset,F100M,F12M
);
input F100M,reset;
output F12M;
reg F12M;
reg[9:0]j;
always @(posedge F100M)
if(!reset)
begin
j<=0;
F12M<=0;
end
else
begin
if(j==3)
begin
j<=0;
F12M<=~F12M;
end
else
j<=j+1;
end
endmodule


  • 赏金猎人的悲伤
  • fpga小班
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
就是上面两种,结果 不一样,第一个和我计算的频率一样,第二个完全不一样


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回fpga吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示