- fixed command size
git-svn-id: http://moon:8086/svn/vhdl/trunk@1282 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
@@ -57,8 +57,8 @@ ARCHITECTURE behavior OF spi_master IS
|
|||||||
signal spi_rst_count : unsigned(5 downto 0);
|
signal spi_rst_count : unsigned(5 downto 0);
|
||||||
signal spi_rst : std_logic;
|
signal spi_rst : std_logic;
|
||||||
|
|
||||||
signal cat_fifo_din : unsigned(to_unsigned(cmd)'length-1 downto 0);
|
signal cat_fifo_din : unsigned(SIZEOF_CMD-1 downto 0);
|
||||||
signal cat_fifo_dout : unsigned(to_unsigned(cmd)'length-1 downto 0);
|
signal cat_fifo_dout : unsigned(SIZEOF_CMD-1 downto 0);
|
||||||
signal cat_fifo_full : std_logic;
|
signal cat_fifo_full : std_logic;
|
||||||
signal cat_fifo_empty : std_logic;
|
signal cat_fifo_empty : std_logic;
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ begin
|
|||||||
GENERIC MAP
|
GENERIC MAP
|
||||||
(
|
(
|
||||||
addr_width => NextExpBaseTwo(CAT_FIFO_DEPTH),
|
addr_width => NextExpBaseTwo(CAT_FIFO_DEPTH),
|
||||||
data_width => cmd_size
|
data_width => SIZEOF_CMD
|
||||||
)
|
)
|
||||||
PORT MAP
|
PORT MAP
|
||||||
(
|
(
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package spi_types is
|
|||||||
|
|
||||||
-- Constants
|
-- Constants
|
||||||
constant XFER_MAX_SIZE_BITS : natural := 32;
|
constant XFER_MAX_SIZE_BITS : natural := 32;
|
||||||
|
constant SIZEOF_CMD : natural := 2*XFER_MAX_SIZE_BITS;
|
||||||
|
|
||||||
-- Types
|
-- Types
|
||||||
type cmd_t is record
|
type cmd_t is record
|
||||||
@@ -33,7 +34,6 @@ package spi_types is
|
|||||||
end record;
|
end record;
|
||||||
|
|
||||||
-- Functions
|
-- Functions
|
||||||
function cmd_size return positive;
|
|
||||||
function to_cmd (xfer_size, data_size : natural) return cmd_t;
|
function to_cmd (xfer_size, data_size : natural) return cmd_t;
|
||||||
function to_unsigned (cmd : cmd_t) return unsigned;
|
function to_unsigned (cmd : cmd_t) return unsigned;
|
||||||
function to_cmd (cmd : unsigned) return cmd_t;
|
function to_cmd (cmd : unsigned) return cmd_t;
|
||||||
@@ -42,12 +42,6 @@ end spi_types;
|
|||||||
|
|
||||||
package body spi_types is
|
package body spi_types is
|
||||||
|
|
||||||
function cmd_size return positive is
|
|
||||||
variable res : cmd_t;
|
|
||||||
begin
|
|
||||||
return res.xfer_size'length + res.data_size'length + 1 + 1;
|
|
||||||
end cmd_size;
|
|
||||||
|
|
||||||
function to_cmd(xfer_size, data_size : natural) return cmd_t is
|
function to_cmd(xfer_size, data_size : natural) return cmd_t is
|
||||||
variable res : cmd_t;
|
variable res : cmd_t;
|
||||||
begin
|
begin
|
||||||
@@ -57,7 +51,7 @@ package body spi_types is
|
|||||||
end to_cmd;
|
end to_cmd;
|
||||||
|
|
||||||
function to_unsigned(cmd : cmd_t) return unsigned is
|
function to_unsigned(cmd : cmd_t) return unsigned is
|
||||||
variable res : unsigned(cmd.xfer_size'length + cmd.data_size'length + 1 + 1 -1 downto 0) := (others => '0');
|
variable res : unsigned(SIZEOF_CMD-1 downto 0) := (others => '0');
|
||||||
begin
|
begin
|
||||||
res(res'left downto res'left - cmd.xfer_size'length+1) := cmd.xfer_size;
|
res(res'left downto res'left - cmd.xfer_size'length+1) := cmd.xfer_size;
|
||||||
res(res'left - cmd.xfer_size'length downto res'left - cmd.xfer_size'length - cmd.data_size'length +1) := cmd.data_size;
|
res(res'left - cmd.xfer_size'length downto res'left - cmd.xfer_size'length - cmd.data_size'length +1) := cmd.data_size;
|
||||||
@@ -68,7 +62,7 @@ package body spi_types is
|
|||||||
variable res : cmd_t;
|
variable res : cmd_t;
|
||||||
begin
|
begin
|
||||||
res.xfer_size := cmd(cmd'left downto cmd'left - res.xfer_size'length+1);
|
res.xfer_size := cmd(cmd'left downto cmd'left - res.xfer_size'length+1);
|
||||||
res.data_size := cmd(cmd'left - res.xfer_size'length downto cmd'left - res.xfer_size'length - res.data_size'length +1);
|
res.data_size := cmd(cmd'left - res.xfer_size'length downto 0);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
end to_cmd;
|
end to_cmd;
|
||||||
|
|||||||
Reference in New Issue
Block a user