hantnt 发表于 2015-7-21 17:32:03

发一个自己写的FPGA SPI从机,跨时钟域,SPI跑到18M没发现问题

模块比较简单,直接粘代码了

module spi_module(
        CLK,
        SSEL, SCK, MOSI, MISO,
        byte_received, byte_data_received, byte_data_sent
);

input CLK;

// SPI Interface
input SSEL;
input SCK;
input MOSI;

output MISO;
// FPGA Interface
input byte_data_sent;
output byte_received;
output byte_data_received;

reg bitcnt;

reg byte_data_received_w;
always @(posedge SCK or posedge SSEL)
begin
        if(SSEL)begin
                bitcnt <= 4'b0000;
        end
        else begin
                bitcnt <= bitcnt + 4'b0001;
                byte_data_received_w <= {byte_data_received_w, MOSI};
        end
end

wire byte_received_w = (~SSEL) && (bitcnt == 4'b1000);

reg byte_data_sentr;
always @(negedge SCK or posedge SSEL)
begin
        if(SSEL)
                byte_data_sentr <= byte_data_sent;
        else begin
                if(bitcnt == 3'b000)
                        byte_data_sentr <= 8'h00;
                else
                        byte_data_sentr <= {byte_data_sentr,1'b0};
        end
end
assign MISO = byte_data_sentr;

reg byte_received_r; always @(posedge CLK) byte_received_r <= {byte_received_r,byte_received_w};
assign byte_received = (byte_received_r==2'b01);

reg byte_data_received_r;
always @(posedge CLK)
begin
        byte_data_received_r <= byte_data_received_w;
        byte_data_received_r <= byte_data_received_r;
end
assign byte_data_received = byte_data_received_r;

endmodule

mfkiwl 发表于 2015-7-21 18:05:01

速度不错,报下在什么器件上实现的呗

hantnt 发表于 2015-7-21 19:00:12

mfkiwl 发表于 2015-7-21 18:05
速度不错,报下在什么器件上实现的呗

这个倒是跟器件没太大关系,因为是直接取自SPI的SCK来采集数据的,非同步方式。
用的EP4CE6

lans0625 发表于 2015-7-21 20:08:17

有点牛逼,可惜Verilog看不懂,只会VHDL.

hantnt 发表于 2015-7-21 20:09:43

lans0625 发表于 2015-7-21 20:08
有点牛逼,可惜Verilog看不懂,只会VHDL.

会了Verlog以后,在学校学的VHDL基本忘干净了。

lans0625 发表于 2015-7-21 20:13:19

hantnt 发表于 2015-7-21 20:09
会了Verlog以后,在学校学的VHDL基本忘干净了。

我是先学的verilog后学的vhdl,最后前者忘得一干二净。

全频阻塞干扰 发表于 2015-7-21 22:11:32

FPGA当丛机
最大的问题就是 SCK 进入FPGA后,进入全局BUFFER,这段延迟,再加上
FPGA的数据输出在Output Buffer上的延时
这2个延迟加起来有十几ns。
这2个延时不解决,一般FPGA当丛机,SPI时钟最好不要超过30M。

hantnt 发表于 2015-7-21 23:11:34

全频阻塞干扰 发表于 2015-7-21 22:11
FPGA当丛机
最大的问题就是 SCK 进入FPGA后,进入全局BUFFER,这段延迟,再加上
FPGA的数据输出在Output Bu ...

说的有道理。

liyang53719 发表于 2015-7-22 22:11:31

支持原创

guolh_bj 发表于 2015-7-29 17:31:24

全频阻塞干扰 发表于 2015-7-21 22:11
FPGA当丛机
最大的问题就是 SCK 进入FPGA后,进入全局BUFFER,这段延迟,再加上
FPGA的数据输出在Output Bu ...

{:handshake:}

tjiefk 发表于 2021-10-9 05:47:08

跨时钟域了
页: [1]
查看完整版本: 发一个自己写的FPGA SPI从机,跨时钟域,SPI跑到18M没发现问题