J
janlee
Guest
Trong dự án của tôi tôi sử dụng PCI9054 "C Mode" để kiểm soát hành vi FPGA và PCI9054 khác peripherals.Acturally như chủ xe buýt địa phương và mục tiêu PCI.
Tôi thành công nhận ra chu kỳ tín hiệu 32 bit đọc & write.But nó khá chậm, khoảng cách giữa hai liên tục đọc hay ghi được hơn 12 us.To kiểm soát đăng ký trong FPGA không phải là một vấn đề, nhưng để chuyển khối lượng lớn dữ liệu trong thời gian thực nó không phải là accecptable.
Bây giờ câu hỏi của tôi là làm thế nào để cấu hình PCI9054 để lanch một chuyển khoản qua burst Chức PLX's (Tôi tự hỏi mà tôi có thể sử dụng chức năng), và làm thế nào để sửa đổi mã của tôi để thích ứng với chuyển giao này.
Nhiều appreciations.
Mã số:---------------------------------------------
- Module: PCI9054 giao diện Module
- File: PCI9054_IF.vhd
- Thư viện: IEEE;
- Mô tả: PCI9054 giao diện điều khiển
- Simulator: Modelsim 5.8/WindowsXP
- Synthesizer:
- Tác giả:
- Khởi tạo: 07 tháng sáu năm 2006
- Ngày cập nhật: 25/07/2006
---------------------------------------------thư viện ieee;
ieee.std_logic_1164.all sử dụng;
ieee.std_logic_unsigned.all sử dụng;
ieee.std_logic_arith.all sử dụng;thực thể là PCI9054_IF
port (
RST_N: in std_logic;
LCLK: in std_logic;
LHOLD: in std_logic;
ADS_N: in std_logic;
BLAST_N: in std_logic;
LWDRD_N: in std_logic;
LA: in std_logic_vector (31 downto 2);
LD: InOut std_logic_vector (31 downto 0);
LHOLDA: out std_logic;
READY_N: out std_logic;
ACK_n: in std_logic;
WR_n: out std_logic;
RD_n: out std_logic);
cuối PCI9054_IF;kiến trúc RTL của PCI9054_IF là
Loại STATE_TYPE là (IDLE, START, WAITSTATE, LAST);
tín hiệu CURRENT_STATE, NEXT_STATE: STATE_TYPE;
tín hiệu iready_n: std_logic;tín hiệu iwr_n, ird_n: std_logic;
tín hiệu iaddr: std_logic_vector (31 downto 2);bắt đầu--
- Grant cho yêu cầu xe buýt địa phương
quá trình (LCLK)
bắt đầu
nếu (LCLK'event và LCLK = '1 ') sau đó
nếu LHOLD = '1 'rồi
LHOLDA <= LHOLD;
khác
LHOLDA <= '0 ';
nếu kết thúc;
nếu kết thúc;
kết thúc quá trình;- Nhà nước Máy Transition
quá trình (LCLK)
bắt đầu
nếu RST_n = '0 'rồi
CURRENT_STATE <= IDLE;
elsif (LCLK'event và LCLK = '1 ') sau đó
CURRENT_STATE <= NEXT_STATE;nếu CURRENT_STATE = IDLE và ADS_N = '0 'rồi
iaddr <= LA;
nếu kết thúc;READY_n <= iready_n;nếu kết thúc;
kết thúc quá trình;- Nhà nước máy
quá trình (CURRENT_STATE, ADS_N, LWDRD_N, BLAST_N, ACK_n)
bắt đầu
NEXT_STATE <= CURRENT_STATE;
trường hợp là CURRENT_STATE
khi IDLE =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
nếu ADS_N = '0 'rồi
NEXT_STATE <= START;
khác
NEXT_STATE <= IDLE;
nếu kết thúc;khi START =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
nếu BLAST_N = '0 'rồi
NEXT_STATE <= WAITSTATE;
khác
NEXT_STATE <= START;
nếu kết thúc;khi WAITSTATE =>
RD_n <= LWDRD_N;
WR_n <= không LWDRD_N;nếu iaddr (31 downto 4) = B "0010_0000_0000_0000_1001_0000_0000" sau đó
nếu ACK_n = '0 'rồi
NEXT_STATE <= LAST;
iready_n <= '0 ';
khác
NEXT_STATE <= WAITSTATE;
iready_n <= '1 ';
nếu kết thúc;
khác
NEXT_STATE <= LAST;
iready_n <= '0 ';
nếu kết thúc;khi LAST =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
nếu ADS_N = '1 'và BLAST_N = '1' rồi
NEXT_STATE <= IDLE;
elsif ADS_N = '0 'rồi
NEXT_STATE <= START;
khác
NEXT_STATE <= LAST;
nếu kết thúc;khi những người khác =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
NEXT_STATE <= IDLE;
kết thúc vụ án;
kết thúc quá trình;end RTL;
Tôi thành công nhận ra chu kỳ tín hiệu 32 bit đọc & write.But nó khá chậm, khoảng cách giữa hai liên tục đọc hay ghi được hơn 12 us.To kiểm soát đăng ký trong FPGA không phải là một vấn đề, nhưng để chuyển khối lượng lớn dữ liệu trong thời gian thực nó không phải là accecptable.
Bây giờ câu hỏi của tôi là làm thế nào để cấu hình PCI9054 để lanch một chuyển khoản qua burst Chức PLX's (Tôi tự hỏi mà tôi có thể sử dụng chức năng), và làm thế nào để sửa đổi mã của tôi để thích ứng với chuyển giao này.
Nhiều appreciations.
Mã số:---------------------------------------------
- Module: PCI9054 giao diện Module
- File: PCI9054_IF.vhd
- Thư viện: IEEE;
- Mô tả: PCI9054 giao diện điều khiển
- Simulator: Modelsim 5.8/WindowsXP
- Synthesizer:
- Tác giả:
- Khởi tạo: 07 tháng sáu năm 2006
- Ngày cập nhật: 25/07/2006
---------------------------------------------thư viện ieee;
ieee.std_logic_1164.all sử dụng;
ieee.std_logic_unsigned.all sử dụng;
ieee.std_logic_arith.all sử dụng;thực thể là PCI9054_IF
port (
RST_N: in std_logic;
LCLK: in std_logic;
LHOLD: in std_logic;
ADS_N: in std_logic;
BLAST_N: in std_logic;
LWDRD_N: in std_logic;
LA: in std_logic_vector (31 downto 2);
LD: InOut std_logic_vector (31 downto 0);
LHOLDA: out std_logic;
READY_N: out std_logic;
ACK_n: in std_logic;
WR_n: out std_logic;
RD_n: out std_logic);
cuối PCI9054_IF;kiến trúc RTL của PCI9054_IF là
Loại STATE_TYPE là (IDLE, START, WAITSTATE, LAST);
tín hiệu CURRENT_STATE, NEXT_STATE: STATE_TYPE;
tín hiệu iready_n: std_logic;tín hiệu iwr_n, ird_n: std_logic;
tín hiệu iaddr: std_logic_vector (31 downto 2);bắt đầu--
- Grant cho yêu cầu xe buýt địa phương
quá trình (LCLK)
bắt đầu
nếu (LCLK'event và LCLK = '1 ') sau đó
nếu LHOLD = '1 'rồi
LHOLDA <= LHOLD;
khác
LHOLDA <= '0 ';
nếu kết thúc;
nếu kết thúc;
kết thúc quá trình;- Nhà nước Máy Transition
quá trình (LCLK)
bắt đầu
nếu RST_n = '0 'rồi
CURRENT_STATE <= IDLE;
elsif (LCLK'event và LCLK = '1 ') sau đó
CURRENT_STATE <= NEXT_STATE;nếu CURRENT_STATE = IDLE và ADS_N = '0 'rồi
iaddr <= LA;
nếu kết thúc;READY_n <= iready_n;nếu kết thúc;
kết thúc quá trình;- Nhà nước máy
quá trình (CURRENT_STATE, ADS_N, LWDRD_N, BLAST_N, ACK_n)
bắt đầu
NEXT_STATE <= CURRENT_STATE;
trường hợp là CURRENT_STATE
khi IDLE =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
nếu ADS_N = '0 'rồi
NEXT_STATE <= START;
khác
NEXT_STATE <= IDLE;
nếu kết thúc;khi START =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
nếu BLAST_N = '0 'rồi
NEXT_STATE <= WAITSTATE;
khác
NEXT_STATE <= START;
nếu kết thúc;khi WAITSTATE =>
RD_n <= LWDRD_N;
WR_n <= không LWDRD_N;nếu iaddr (31 downto 4) = B "0010_0000_0000_0000_1001_0000_0000" sau đó
nếu ACK_n = '0 'rồi
NEXT_STATE <= LAST;
iready_n <= '0 ';
khác
NEXT_STATE <= WAITSTATE;
iready_n <= '1 ';
nếu kết thúc;
khác
NEXT_STATE <= LAST;
iready_n <= '0 ';
nếu kết thúc;khi LAST =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
nếu ADS_N = '1 'và BLAST_N = '1' rồi
NEXT_STATE <= IDLE;
elsif ADS_N = '0 'rồi
NEXT_STATE <= START;
khác
NEXT_STATE <= LAST;
nếu kết thúc;khi những người khác =>
RD_n <= '1 ';
WR_n <= '1 ';
iready_n <= '1 ';
NEXT_STATE <= IDLE;
kết thúc vụ án;
kết thúc quá trình;end RTL;