Hello. I want to develop an application that is able to get and store
two input values, swap from lower case to upper case only the first
value and finally output the two stored values. E.g.: if the input
string is "john", then the output string should be "JoHn". The
application should get "j" from user_w_write_8_data and store it into
my_buffer_a, swap "j" into "J", then get "o" store it into my_buffer_b,
then output "J", then output "o". After that the application should get
"h" from user_w_write_8_data, swap "h" into "H", and store it into
my_buffer_a, then get "n" store it into my_buffer_b, then output "H",
then output "n". Basically, the application should store two characters,
swap the first one and then output these two, store other two
characters, swap the first one and then output these two characters etc.
The problem of my application does not swap lower to upper characters
that is stored into my_buffer_a. Instead of outputing "JoHn", my
application outputs "john". It seems like that my application does not
go into the first if statement (if (counter=0) then...), but I am asking
to myself how it is possible that the application outputs data if does
not go into if (counter=0) then... Any hint?
Thanks.
Here the code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity xillydemo isport (
PCIE_PERST_B_LS : INstd_logic;
PCIE_REFCLK_N : INstd_logic;
PCIE_REFCLK_P : INstd_logic;
PCIE_RX_N : INstd_logic_vector(3DOWNTO0);
PCIE_RX_P : INstd_logic_vector(3DOWNTO0);
GPIO_LED : OUTstd_logic_vector(3DOWNTO0);
PCIE_TX_N : OUTstd_logic_vector(3DOWNTO0);
PCIE_TX_P : OUTstd_logic_vector(3DOWNTO0));
end xillydemo;
architecture sample_arch of xillydemo iscomponent xillybus
port (
PCIE_PERST_B_LS : INstd_logic;
PCIE_REFCLK_N : INstd_logic;
PCIE_REFCLK_P : INstd_logic;
PCIE_RX_N : INstd_logic_vector(3DOWNTO0);
PCIE_RX_P : INstd_logic_vector(3DOWNTO0);
GPIO_LED : OUTstd_logic_vector(3DOWNTO0);
PCIE_TX_N : OUTstd_logic_vector(3DOWNTO0);
PCIE_TX_P : OUTstd_logic_vector(3DOWNTO0);
bus_clk : OUTstd_logic;
quiesce : OUTstd_logic;
user_r_mem_8_rden : OUTstd_logic;
user_r_mem_8_empty : INstd_logic;
user_r_mem_8_data : INstd_logic_vector(7DOWNTO0);
user_r_mem_8_eof : INstd_logic;
user_r_mem_8_open : OUTstd_logic;
user_w_mem_8_wren : OUTstd_logic;
user_w_mem_8_full : INstd_logic;
user_w_mem_8_data : OUTstd_logic_vector(7DOWNTO0);
user_w_mem_8_open : OUTstd_logic;
user_mem_8_addr : OUTstd_logic_vector(4DOWNTO0);
user_mem_8_addr_update : OUTstd_logic;
user_r_read_32_rden : OUTstd_logic;
user_r_read_32_empty : INstd_logic;
user_r_read_32_data : INstd_logic_vector(31DOWNTO0);
user_r_read_32_eof : INstd_logic;
user_r_read_32_open : OUTstd_logic;
user_r_read_8_rden : OUTstd_logic;
user_r_read_8_empty : INstd_logic;
user_r_read_8_data : INstd_logic_vector(7DOWNTO0);
user_r_read_8_eof : INstd_logic;
user_r_read_8_open : OUTstd_logic;
user_w_write_32_wren : OUTstd_logic;
user_w_write_32_full : INstd_logic;
user_w_write_32_data : OUTstd_logic_vector(31DOWNTO0);
user_w_write_32_open : OUTstd_logic;
user_w_write_8_wren : OUTstd_logic;
user_w_write_8_full : INstd_logic;
user_w_write_8_data : OUTstd_logic_vector(7DOWNTO0);
user_w_write_8_open : OUTstd_logic);
endcomponent;
component fifo_8x2048
port (
clk: INstd_logic;
srst: INstd_logic;
din: INstd_logic_VECTOR(7downto0);
wr_en: INstd_logic;
rd_en: INstd_logic;
dout: OUTstd_logic_VECTOR(7downto0);
full: OUTstd_logic;
empty: OUTstd_logic);
endcomponent;
component fifo_32x512
port (
clk: INstd_logic;
srst: INstd_logic;
din: INstd_logic_VECTOR(31downto0);
wr_en: INstd_logic;
rd_en: INstd_logic;
dout: OUTstd_logic_VECTOR(31downto0);
full: OUTstd_logic;
empty: OUTstd_logic);
endcomponent;
-- Synplicity black box declaration
attribute syn_black_box : boolean;
attribute syn_black_box of fifo_32x512: componentis true;
attribute syn_black_box of fifo_8x2048: componentis true;
type demo_mem isarray(0TO31) ofstd_logic_vector(7DOWNTO0);
signal demoarray : demo_mem;
signal bus_clk : std_logic;
signal quiesce : std_logic;
signal reset_8 : std_logic;
signal reset_32 : std_logic;
signal ram_addr : integerrange0to31;
signal user_r_mem_8_rden : std_logic;
signal user_r_mem_8_empty : std_logic;
signal user_r_mem_8_data : std_logic_vector(7DOWNTO0);
signal user_r_mem_8_eof : std_logic;
signal user_r_mem_8_open : std_logic;
signal user_w_mem_8_wren : std_logic;
signal user_w_mem_8_full : std_logic;
signal user_w_mem_8_data : std_logic_vector(7DOWNTO0);
signal user_w_mem_8_open : std_logic;
signal user_mem_8_addr : std_logic_vector(4DOWNTO0);
signal user_mem_8_addr_update : std_logic;
signal user_r_read_32_rden : std_logic;
signal user_r_read_32_empty : std_logic;
signal user_r_read_32_data : std_logic_vector(31DOWNTO0);
signal user_r_read_32_eof : std_logic;
signal user_r_read_32_open : std_logic;
signal user_r_read_8_rden : std_logic;
signal user_r_read_8_empty : std_logic;
signal user_r_read_8_data : std_logic_vector(7DOWNTO0);
signal user_r_read_8_eof : std_logic;
signal user_r_read_8_open : std_logic;
signal user_w_write_32_wren : std_logic;
signal user_w_write_32_full : std_logic;
signal user_w_write_32_data : std_logic_vector(31DOWNTO0);
signal user_w_write_32_open : std_logic;
signal user_w_write_8_wren : std_logic;
signal user_w_write_8_full : std_logic;
signal user_w_write_8_data : std_logic_vector(7DOWNTO0);
signal user_w_write_8_open : std_logic;
begin
xillybus_ins : xillybus
portmap (
-- Ports related to /dev/xillybus_mem_8-- FPGA to CPU signals:
user_r_mem_8_rden => user_r_mem_8_rden,
user_r_mem_8_empty => user_r_mem_8_empty,
user_r_mem_8_data => user_r_mem_8_data,
user_r_mem_8_eof => user_r_mem_8_eof,
user_r_mem_8_open => user_r_mem_8_open,
-- CPU to FPGA signals:
user_w_mem_8_wren => user_w_mem_8_wren,
user_w_mem_8_full => user_w_mem_8_full,
user_w_mem_8_data => user_w_mem_8_data,
user_w_mem_8_open => user_w_mem_8_open,
-- Address signals:
user_mem_8_addr => user_mem_8_addr,
user_mem_8_addr_update => user_mem_8_addr_update,
-- Ports related to /dev/xillybus_read_32-- FPGA to CPU signals:
user_r_read_32_rden => user_r_read_32_rden,
user_r_read_32_empty => user_r_read_32_empty,
user_r_read_32_data => user_r_read_32_data,
user_r_read_32_eof => user_r_read_32_eof,
user_r_read_32_open => user_r_read_32_open,
-- Ports related to /dev/xillybus_read_8-- FPGA to CPU signals:
user_r_read_8_rden => user_r_read_8_rden,
user_r_read_8_empty => user_r_read_8_empty,
user_r_read_8_data => user_r_read_8_data,
user_r_read_8_eof => user_r_read_8_eof,
user_r_read_8_open => user_r_read_8_open,
-- Ports related to /dev/xillybus_write_32-- CPU to FPGA signals:
user_w_write_32_wren => user_w_write_32_wren,
user_w_write_32_full => user_w_write_32_full,
user_w_write_32_data => user_w_write_32_data,
user_w_write_32_open => user_w_write_32_open,
-- Ports related to /dev/xillybus_write_8-- CPU to FPGA signals:
user_w_write_8_wren => user_w_write_8_wren,
user_w_write_8_full => user_w_write_8_full,
user_w_write_8_data => user_w_write_8_data,
user_w_write_8_open => user_w_write_8_open,
-- General signals
PCIE_PERST_B_LS => PCIE_PERST_B_LS,
PCIE_REFCLK_N => PCIE_REFCLK_N,
PCIE_REFCLK_P => PCIE_REFCLK_P,
PCIE_RX_N => PCIE_RX_N,
PCIE_RX_P => PCIE_RX_P,
GPIO_LED => GPIO_LED,
PCIE_TX_N => PCIE_TX_N,
PCIE_TX_P => PCIE_TX_P,
bus_clk => bus_clk,
quiesce => quiesce
);
-- A simple inferred RAM
ram_addr <= conv_integer(user_mem_8_addr);
process (bus_clk)
variable counter : integer := 0;
variable my_buffer_a : std_logic_vector(7downto0) := (others => '0');
variable my_buffer_b : std_logic_vector(7downto0) := (others => '0');
beginif (bus_clk'event and bus_clk = '1') thenif (counter=0) then--push data from user_w_write_8_data to my_buffer_a
my_buffer_a := user_w_write_8_data;
my_buffer_a(5) := not my_buffer_a(5);
counter := 1;
elsif (counter = 1) then--push data from user_w_write_8_data to my_buffer_b
my_buffer_b := user_w_write_8_data;
counter := 2;
elsif (counter = 2) then--pull data from my_buffer_a to din
user_r_mem_8_data <= my_buffer_a;
counter := 3;
elsif (counter = 3) then--pull data from my_buffer_b to din
user_r_mem_8_data <= my_buffer_b;
counter := 0;
endif;
endif;
endprocess;
user_r_mem_8_empty <= '0';
user_r_mem_8_eof <= '0';
user_w_mem_8_full <= '0';
-- 32-bit loopback
fifo_32 : fifo_32x512
portmap(
clk => bus_clk,
srst => reset_32,
din => user_w_write_32_data,
wr_en => user_w_write_32_wren,
rd_en => user_r_read_32_rden,
dout => user_r_read_32_data,
full => user_w_write_32_full,
empty => user_r_read_32_empty
);
reset_32 <= not (user_w_write_32_open or user_r_read_32_open);
user_r_read_32_eof <= '0';
-- 8-bit loopback
fifo_8 : fifo_8x2048
portmap(
clk => bus_clk,
srst => reset_8,
din => user_w_write_8_data,
wr_en => user_w_write_8_wren,
rd_en => user_r_read_8_rden,
dout => user_r_read_8_data,
full => user_w_write_8_full,
empty => user_r_read_8_empty
);
reset_8 <= not (user_w_write_8_open or user_r_read_8_open);
user_r_read_8_eof <= '0';
end sample_arch;