在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 109|回复: 1

[求助] fpga SPI 实现 问题求助

[复制链接]
发表于 昨天 11:03 | 显示全部楼层 |阅读模式
500资产
本帖最后由 LBJKKKK 于 2025-4-19 11:04 编辑

大佬帮我看一下啊这段代码用vivado配置后,烧录后,用示波器为啥只能测出sclk没有sdo信号,急急急!!!!!!

   
module spi_24(clk_in1_p,resetb,clk_in1_n,rst,clk_in2_p,clk_in2_n,data_in,sdo,sclk,clkout,sel,load);

// Input  ports
input  clk_in1_p;
input  clk_in1_n;
input  clk_in2_p;
input  clk_in2_n;
input rst;
input resetb;
//input  rst;
//output  ports
output clkout;
wire   clkout;
output sclk;
wire   dat_out;
output sdo;
output sel;
output load;
reg    sdo;
//assign sdo[23]=sclk;
output data_in;
wire   data_in;
wire clk;
//  Internal parameter
reg[9:0] sclk_cnt;
reg[9:0] dclk_cnt;

reg[5:0] stopcount;
reg[5:0] stopcount2;
reg[255:0] datak;
reg stop;
//wire stop;

reg      dclk;
wire           sclk;
wire     rst_dclk;
wire           dlk2;
reg sel;
reg load;
//????
//reg [31:0] counter;
  

//assign resetb =rst;//动复位

always @(posedge clk) begin
    if (~rst) begin          // ?????
        sclk_cnt <= 9'b0;
    end else if (~resetb) begin // ???
        sclk_cnt <= 9'b0;
    end else begin
        sclk_cnt <= sclk_cnt + 1;
    end
end

assign sclk = sclk_cnt[8];////////9??5

// ????????????
always @(posedge clk) begin
    if (~resetb) begin
        dclk_cnt <= 7'b0;       // ???7????dclk_cnt[6]
        dclk <= 1'b0;
    end else begin
        // ?????
        if (dclk_cnt == 7'd63) begin // 64??????????
            dclk_cnt <= 7'b0;
            dclk <= ~dclk;    // ?????????dclk
        end else begin
            dclk_cnt <= dclk_cnt + 1;
        end
    end
end

assign rst_dclk = (sclk ^ dclk);

//????
always @ (posedge dclk or negedge resetb)//
begin
  if (resetb==0)
          begin
          stop<=0;
          stopcount <= 5'b0;
  
          end
  else
  
if (stopcount==24)
begin
stopcount <= 5'b0;
stop<=1;


end
   
else       begin
            stopcount <= stopcount+1;  
                                end

                               
end



//                ???sel load????       
always @ (posedge dclk or negedge resetb)       
begin
  if (resetb==0)
        begin
          stopcount2 <= 5'b0;
          end
  else                        
        if (stopcount2==26)
                begin
                stopcount2 <= 5'b0;
                end
  else      
        begin
        stopcount2 <= stopcount2+1;  
        end                               
end



assign dclk2=dclk&~stop;

//????&??
always@(posedge sclk or negedge resetb)
begin
    if(!resetb)
            begin
                      sdo <= 0;
                datak<=256'h923456789ABCDEF123456789ABCDEFF0123456789ABCDEF0123456789ABC9ABD;
            end
       else
            begin
                datak<=datak<<1;
                sdo <= datak[255];
                        //sdo <= 1;
            end
end       




assign clkout=dclk2;


always @ (posedge clk or negedge resetb)//
begin

if (resetb==0)
                  begin
              sel=0;

                  end
          else
          
         if ((stopcount2==25))
         begin
       
         sel=1;

         
         end

end


always @ (posedge clk or negedge resetb)//
begin

if (resetb==0)
                  begin
       load=0;

                  end
          else
          
         if ((stopcount2==26))
         begin
       
         load=1;

         
         end

end
clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk),     // output clk_out1
    // Status and control signals
    .reset(~rst),
    // input reset
    .locked(locked),       // output locked
   // Clock in ports
  .clk_in1_p(clk_in1_p),    // input clk_in1_p
    .clk_in1_n(clk_in1_n));
   
clk_wiz_1 clk_wiz_inst
   (
    // Clock out ports
    .clk_out1(),     // output clk_out1
    // Status and control signals
    .reset(resetb), // input reset
    .locked(locked2),       // output locked
   // Clock in ports
    .clk_in1_p(clk_in2_p),    // input clk_in1_p
    .clk_in1_n(clk_in2_n));

ila_0 your_instance_name (
        .clk(clk), // input wire clk


        .probe0(sdo),
        .probe1(sclk),
        .probe2(resetb)  // input wire [255:0] probe0
);






endmodule



   

发表于 昨天 22:41 | 显示全部楼层
datak 数据较短,示波器的trigger是否设置正确?是否能抓到最开始的sdo信号?
datak 可以用循环移位试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-4-20 12:55 , Processed in 0.021217 second(s), 5 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表