Merge pull request #126 from jboone/cpld_tx_q_invert_fix

CPLD TX Q invert fix
This commit is contained in:
Michael Ossmann
2014-08-21 12:11:24 -06:00
3 changed files with 52 additions and 50 deletions

Binary file not shown.

View File

@ -1,5 +1,5 @@
Programmer Jedec Bit Map Programmer Jedec Bit Map
Date Extracted: Sat Aug 16 17:13:17 2014 Date Extracted: Wed Aug 20 08:36:47 2014
QF25812* QF25812*
QP100* QP100*
@ -68,7 +68,7 @@ L001440 110101111111011101111111111111111111111111101111111111111111111111111111
L001520 11110111111110111111110111111111111111111101111111111111111111111111111111111111* L001520 11110111111110111111110111111111111111111101111111111111111111111111111111111111*
L001600 11010111111110110111111011111111111111111111111111111111111111111111111111111111* L001600 11010111111110110111111011111111111111111111111111111111111111111111111111111111*
L001680 11111011110111111111111111111111111111111111111111111111111111111111111111111111* L001680 11111011110111111111111111111111111111111111111111111111111111111111111111111111*
L001760 11111111110111111111111111111111111101111111111111111111111111111111111111111111* L001760 11111111110111111111111111111111111110111111111111111111111111111111111111111111*
L001840 11111111111111111111111111111111111111111111111111111111111111111111111111111111* L001840 11111111111111111111111111111111111111111111111111111111111111111111111111111111*
L001920 11111111111111111111111111111111111111111111111111111111111111111111111111111111* L001920 11111111111111111111111111111111111111111111111111111111111111111111111111111111*
L002000 11111111111111111111111111111111111111111111111111111111111111111111111111111111* L002000 11111111111111111111111111111111111111111111111111111111111111111111111111111111*
@ -232,21 +232,21 @@ L007056 1111111111111111*
L007072 1111111111111111* L007072 1111111111111111*
Note Block 1 PLA AND array * Note Block 1 PLA AND array *
L007088 11111111110111111011111111111101011111111111111111111111111111111111111111111111* L007088 11111111110111110111111111111101011111111111111111111111111111111111111111111111*
L007168 11111101111111111111111111111111101111111111111111111111111111111111111111111111* L007168 11111101111111111111111111111111101111111111111111111111111111111111111111111111*
L007248 11111111110111111011011111111101111111111111111111111111111111111111111111111111* L007248 11111111110111110111011111111101111111111111111111111111111111111111111111111111*
L007328 11111101111111111111101111111111111111111111111111111111111111111111111111111111* L007328 11111101111111111111101111111111111111111111111111111111111111111111111111111111*
L007408 11111111110111111001111111111101111111111111111111111111111111111111111111111111* L007408 11111111110111110101111111111101111111111111111111111111111111111111111111111111*
L007488 11111101111111111110111111111111111111111111111111111111111111111111111111111111* L007488 11111101111111111110111111111111111111111111111111111111111111111111111111111111*
L007568 11111111110111111011111111111101111111111101111111111111111111111111111111111111* L007568 11111111110111110111111111111101111111111101111111111111111111111111111111111111*
L007648 11111101111111111111111111111111111111111110111111111111111111111111111111111111* L007648 11111101111111111111111111111111111111111110111111111111111111111111111111111111*
L007728 11111111010111111011111111111101111111111111111111111111111111111111111111111111* L007728 11111111010111110111111111111101111111111111111111111111111111111111111111111111*
L007808 11111101101111111111111111111111111111111111111111111111111111111111111111111111* L007808 11111101101111111111111111111111111111111111111111111111111111111111111111111111*
L007888 11110111110111111011111111111101111111111111111111111111111111111111111111111111* L007888 11110111110111110111111111111101111111111111111111111111111111111111111111111111*
L007968 11111001111111111111111111111111111111111111111111111111111111111111111111111111* L007968 11111001111111111111111111111111111111111111111111111111111111111111111111111111*
L008048 11011111110111111011111111111101111111111111111111111111111111111111111111111111* L008048 11011111110111110111111111111101111111111111111111111111111111111111111111111111*
L008128 11101101111111111111111111111111111111111111111111111111111111111111111111111111* L008128 11101101111111111111111111111111111111111111111111111111111111111111111111111111*
L008208 11111111110111111011111111110101111111111111111111111111111111111111111111111111* L008208 11111111110111110111111111110101111111111111111111111111111111111111111111111111*
L008288 11111101111111111111111111111011111111111111111111111111111111111111111111111111* L008288 11111101111111111111111111111011111111111111111111111111111111111111111111111111*
L008368 11111111111111111111111111111111111111111111111111111111111111111111111111111111* L008368 11111111111111111111111111111111111111111111111111111111111111111111111111111111*
L008448 11111111111111111111111111111111111111111111111111111111111111111111111111111111* L008448 11111111111111111111111111111111111111111111111111111111111111111111111111111111*
@ -753,5 +753,5 @@ L025810 0*
Note I/O Bank 1 Vcco * Note I/O Bank 1 Vcco *
L025811 0* L025811 0*
CFB9B* CFB93*
AA89 AA7A

View File

@ -32,7 +32,7 @@ entity top is
HOST_CAPTURE : out std_logic; HOST_CAPTURE : out std_logic;
HOST_DISABLE : in std_logic; HOST_DISABLE : in std_logic;
HOST_DIRECTION : in std_logic; HOST_DIRECTION : in std_logic;
HOST_DECIM_SEL : in std_logic_vector(2 downto 0); HOST_DECIM_SEL : in std_logic_vector(2 downto 0);
HOST_Q_INVERT : in std_logic; HOST_Q_INVERT : in std_logic;
DA : in std_logic_vector(7 downto 0); DA : in std_logic_vector(7 downto 0);
@ -61,11 +61,12 @@ architecture Behavioral of top is
signal data_to_host_o : std_logic_vector(7 downto 0); signal data_to_host_o : std_logic_vector(7 downto 0);
signal decimate_count : std_logic_vector(2 downto 0) := "111"; signal decimate_count : std_logic_vector(2 downto 0) := "111";
signal decimate_sel_i : std_logic_vector(2 downto 0); signal decimate_sel_i : std_logic_vector(2 downto 0);
signal decimate_en : std_logic; signal decimate_en : std_logic;
signal q_invert : std_logic; signal q_invert : std_logic;
signal q_invert_mask : std_logic_vector(7 downto 0); signal rx_q_invert_mask : std_logic_vector(7 downto 0);
signal tx_q_invert_mask : std_logic_vector(7 downto 0);
begin begin
@ -98,38 +99,39 @@ begin
transfer_direction_i <= to_dac when HOST_DIRECTION = '1' transfer_direction_i <= to_dac when HOST_DIRECTION = '1'
else from_adc; else from_adc;
decimate_sel_i <= HOST_DECIM_SEL; decimate_sel_i <= HOST_DECIM_SEL;
------------------------------------------------ ------------------------------------------------
decimate_en <= '1' when decimate_count = "111" else '0'; decimate_en <= '1' when decimate_count = "111" else '0';
process(host_clk_i) process(host_clk_i)
begin begin
if rising_edge(host_clk_i) then if rising_edge(host_clk_i) then
if codec_clk_i = '1' then if codec_clk_i = '1' then
if decimate_count = "111" or host_data_enable_i = '0' then if decimate_count = "111" or host_data_enable_i = '0' then
decimate_count <= decimate_sel_i; decimate_count <= decimate_sel_i;
else else
decimate_count <= decimate_count + 1; decimate_count <= decimate_count + 1;
end if; end if;
end if; end if;
end if; end if;
end process; end process;
q_invert <= HOST_Q_INVERT; q_invert <= HOST_Q_INVERT;
q_invert_mask <= X"80" when q_invert = '1' else X"7f"; rx_q_invert_mask <= X"80" when q_invert = '1' else X"7f";
tx_q_invert_mask <= X"7F" when q_invert = '1' else X"80";
process(host_clk_i) process(host_clk_i)
begin begin
if rising_edge(host_clk_i) then if rising_edge(host_clk_i) then
if codec_clk_i = '1' then if codec_clk_i = '1' then
-- I: non-inverted between MAX2837 and MAX5864 -- I: non-inverted between MAX2837 and MAX5864
data_to_host_o <= adc_data_i xor X"80"; data_to_host_o <= adc_data_i xor X"80";
else else
-- Q: inverted between MAX2837 and MAX5864 -- Q: inverted between MAX2837 and MAX5864
data_to_host_o <= adc_data_i xor q_invert_mask; data_to_host_o <= adc_data_i xor rx_q_invert_mask;
end if; end if;
end if; end if;
end process; end process;
@ -138,7 +140,7 @@ begin
if rising_edge(host_clk_i) then if rising_edge(host_clk_i) then
if transfer_direction_i = to_dac then if transfer_direction_i = to_dac then
if codec_clk_i = '1' then if codec_clk_i = '1' then
dac_data_o <= (data_from_host_i xor q_invert_mask) & q_invert_mask(0) & q_invert_mask(0); dac_data_o <= (data_from_host_i xor tx_q_invert_mask) & tx_q_invert_mask(0) & tx_q_invert_mask(0);
else else
dac_data_o <= (data_from_host_i xor X"80") & "00"; dac_data_o <= (data_from_host_i xor X"80") & "00";
end if; end if;