微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog 代码,问题出在哪,小白求助

Verilog 代码,问题出在哪,小白求助

时间:10-02 整理:3721RD 点击:
大家好,接触 Verilog 时间不长,遇到一个问题,真心求教。谢谢
背景:想把 AD 输出的 8 位并行数据在 CPLD 中进行并串转换,并在 DSP 提供的 串行时钟 CLKR1 和 帧同步(片选)信号 FSR1 的控制下,将串行数据经 DR1 引脚输出。
问题:综合能通过,但经过波形仿真,DR1 输出的数据总是不对。
代码如下:
//
module spi(
         output reg clk_ad,
    //SPI_1,方向:CPLD-->DSP        
         output reg DR1,
         input FSR1,
         input CLKR1,
         
         input clk_in,
         input [7:0]data_in       //AD输入cpld的8位数据
        );
         
         reg[4:0]temp;
//add        
         reg[7:0]data_to_dsp;     //用于数据缓存
        reg[8:0]data_to_dspp;
//AD的时钟由有源晶振4分频得到,10/4=2.5M
always @(posedge clk_in) begin
         temp<=temp+1'd1;
         if(temp==1)
                 begin
                         clk_ad<=~clk_ad;
                         temp<=0;
end
         else
                         clk_ad<=clk_ad;
end
//AD输入到CPLD的数据转移到寄存器data_to_dsp中
always @(posedge clk_ad) begin
         data_to_dsp<=data_in;               
end
//CPLD到DSP的SPI实现(SPI1)
always @(negedge CLKR1) begin
         if(!FSR1)
                         begin
                                   data_to_dspp[8:0] <= {data_to_dsp[7:0],1'b0};
                                 DR1 <= data_to_dspp[8];
     end
end
endmodule

output reg DR1, 你给挪下来,别放上边

这样吗?
always @(negedge CLKR1) begin
          if(!FSR1)
                          begin
                                    data_to_dspp[8:0] <= {data_to_dsp[7:0],1'b0};
                                 // DR1 <= data_to_dspp[8];
      end
end
always @(negedge CLKR1) begin
          if(!FSR1)
                          begin
                                   //data_to_dspp[8:0] <= {data_to_dsp[7:0],1'b0};
                                  DR1 <= data_to_dspp[8];
      end
end

可以参考明德扬点拨FPGA基础视频,视频里有verilog的内容。

谢谢提供建议,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top