اطلاعیه

Collapse
No announcement yet.

کمک ( نحوه ایجاد پورت با وظعیت ورودی و خروجی )

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک ( نحوه ایجاد پورت با وظعیت ورودی و خروجی )

    :question:کمک فوری که خیلی گیرم. :angry: :angry:
    وقتی برای ارائه پروژه ندارم و کار نمی کنه.
    پروژه من یه نمایشگر تصویر با استفاده از ارتباط vga است ( مانیتور کامپیوتر) تقریبا تکمیله اما تو ریختن و گرفتن داده از حافظه sram مشکل دارم برای ایجاد پورت دوطرفه برای داده sram همانند میکرو 8051 از بافر سه حالته استفاده کردم اما وقتی بافر غیر فعال است ( در وظعیت ورودی بودن پورت) به جای داده ارسالی از sram چیزی شبیه نویز روی منیتور نمایش می دهد.
    ممنون میشم اگر کمکم کنید. :question:

    #2
    پاسخ : کمک ( نحوه ایجاد پورت با وظعیت ورودی و خروجی )

    سلام، من از کد زیر برای نمایش اطلاعات داخل SRAM روی VGA استفاده میکنم و یک پورت فقط خواندنی براش کنار گذاشتم و برای سینک کردن خوندن و نوشتن از طریق پورت دیگه کافیه سورس کلاک VGA و SRAM یکی باشن به شرطی که کلاک SRAM در این کد همیشه دو برابر یا بیشتر از کلاک VGA باشه، مثلا برای 640x480 60Hz پیکسل کلاک برابر 25Mhz هست پس حداقل کلاک این بلاک باید 50MHz باشه تا پیکسلها تکراری نشن یا نویز نگیرن.


    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;

    --Dual Port SRAM Controller: 1 Port Read-Only for VGA Driver + 1 Port Read or Write for External Access
    entity SRAM_Controller is
    port (
    SRAM_CLOCK_IN : IN STD_LOGIC;

    SRAM_READ_ADDRESS_IN : IN UNSIGNED (17 downto 0);
    SRAM_READ_DATA_OUT : OUT UNSIGNED (15 downto 0);
    SRAM_READ2_ADDRESS_IN : IN UNSIGNED (17 downto 0);
    SRAM_READ2_DATA_OUT : OUT UNSIGNED (15 downto 0);
    SRAM_WRITE_ADDRESS_IN : IN UNSIGNED (17 downto 0);
    SRAM_WRITE_DATA_IN : IN UNSIGNED (15 downto 0);
    SRAM_WRITE_COMMAND_IN : IN STD_LOGIC;

    SRAM_ADDRESS_OUT : OUT STD_LOGIC_VECTOR (17 downto 0);
    SRAM_DATA_INOUT : INOUT STD_LOGIC_VECTOR (15 downto 0);
    SRAM_nWE_OUT : OUT STD_LOGIC;
    SRAM_nCE_OUT : OUT STD_LOGIC;
    SRAM_nOE_OUT : OUT STD_LOGIC;
    SRAM_nLB_OUT : OUT STD_LOGIC;
    SRAM_nUB_OUT : OUT STD_LOGIC
    );
    end SRAM_Controller;


    architecture SRAM_Controller_Function of SRAM_Controller is
    signal SRAM_nWRITE_COMMAND_IN : STD_LOGIC := '0';
    begin
    --Always Enabled For 16-Bit Data Access
    SRAM_nLB_OUT <= '0';
    SRAM_nUB_OUT <= '0';
    SRAM_nOE_OUT <= '0';



    --@200Mhz = 5ns
    process(SRAM_CLOCK_IN)
    variable State_Counter : Integer range 0 to 4 := 0;
    begin
    if rising_edge(SRAM_CLOCK_IN) then
    case State_Counter is

    when 0 =>
    SRAM_nWE_OUT <= '1';
    SRAM_nCE_OUT <= '0';
    for i in 17 downto 0 loop
    SRAM_ADDRESS_OUT(i) <= SRAM_READ_ADDRESS_IN(i);
    end loop;
    for i in 15 downto 0 loop
    SRAM_DATA_INOUT(i) <= 'Z';
    end loop;
    State_Counter := State_Counter + 1;
    when 1 =>
    SRAM_nCE_OUT <= '1';
    for i in 15 downto 0 loop
    SRAM_READ_DATA_OUT(i) <= SRAM_DATA_INOUT(i);
    end loop;
    State_Counter := State_Counter + 1;
    when 2 =>
    if(SRAM_nWRITE_COMMAND_IN = not SRAM_WRITE_COMMAND_IN)then
    SRAM_nWRITE_COMMAND_IN <= SRAM_WRITE_COMMAND_IN;
    for i in 17 downto 0 loop
    SRAM_ADDRESS_OUT(i) <= SRAM_WRITE_ADDRESS_IN(i);
    end loop;
    for i in 15 downto 0 loop
    SRAM_DATA_INOUT(i) <= SRAM_WRITE_DATA_IN(i);
    end loop;
    SRAM_nWE_OUT <= '0';
    else
    SRAM_nWE_OUT <= '1';
    for i in 17 downto 0 loop
    SRAM_ADDRESS_OUT(i) <= SRAM_READ2_ADDRESS_IN(i);
    end loop;
    for i in 15 downto 0 loop
    SRAM_DATA_INOUT(i) <= 'Z';
    end loop;
    end if;
    SRAM_nCE_OUT <= '0';
    State_Counter := State_Counter + 1;
    when 3 =>
    if(SRAM_nWRITE_COMMAND_IN = SRAM_WRITE_COMMAND_IN)then
    for i in 15 downto 0 loop
    SRAM_READ2_DATA_OUT(i) <= SRAM_DATA_INOUT(i);
    end loop;
    end if;
    SRAM_nCE_OUT <= '1';
    State_Counter := 0;
    when others => null;
    end case;
    end if;
    end process;


    end SRAM_Controller_Function;

    اسمایل، تومورو ویل بی وُرس

    دیدگاه

    لطفا صبر کنید...
    X