সংশ্লেষিত রম কোরের সাথে একটি সাধারণ পরীক্ষার বেঞ্চ সিমুলেট করা


9

আমি এফপিজিএর জগতে সম্পূর্ণ নতুন এবং ভেবেছিলাম আমি খুব সাধারণ একটি প্রকল্প দিয়ে শুরু করব: একটি 4-বিট 7-বিভাগের ডিকোডার। আমি প্রথম সংস্করণটি সম্পূর্ণরূপে ভিএইচডিএলে লিখেছি (এটি মূলত একক সংমিশ্রণমূলক select, কোনও ঘড়ি দরকার নেই) এবং এটি কাজ করে বলে মনে হয় তবে আমি জিলিনেক্স আইএসইতে "আইপি কোর" স্টাফ নিয়েও পরীক্ষা করতে চাই।

তাই আপাতত আমি "আইএসই প্রকল্প এক্সপ্লোরার" জিইউআই ব্যবহার করছি এবং আমি একটি রম কোর সহ একটি নতুন প্রকল্প তৈরি করেছি। উত্পন্ন ভিএইচডিএল কোডটি হ'ল:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off
LIBRARY XilinxCoreLib;
-- synthesis translate_on
ENTITY SSROM IS
  PORT (
    clka : IN STD_LOGIC;
    addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
    douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
  );
END SSROM;

ARCHITECTURE SSROM_a OF SSROM IS
-- synthesis translate_off
COMPONENT wrapped_SSROM
  PORT (
    clka : IN STD_LOGIC;
    addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
    douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
  );
END COMPONENT;

-- Configuration specification
  FOR ALL : wrapped_SSROM USE ENTITY XilinxCoreLib.blk_mem_gen_v7_2(behavioral)
    GENERIC MAP (
      c_addra_width => 4,
      c_addrb_width => 4,
      c_algorithm => 1,
      c_axi_id_width => 4,
      c_axi_slave_type => 0,
      c_axi_type => 1,
      c_byte_size => 9,
      c_common_clk => 0,
      c_default_data => "0",
      c_disable_warn_bhv_coll => 0,
      c_disable_warn_bhv_range => 0,
      c_enable_32bit_address => 0,
      c_family => "spartan3",
      c_has_axi_id => 0,
      c_has_ena => 0,
      c_has_enb => 0,
      c_has_injecterr => 0,
      c_has_mem_output_regs_a => 0,
      c_has_mem_output_regs_b => 0,
      c_has_mux_output_regs_a => 0,
      c_has_mux_output_regs_b => 0,
      c_has_regcea => 0,
      c_has_regceb => 0,
      c_has_rsta => 0,
      c_has_rstb => 0,
      c_has_softecc_input_regs_a => 0,
      c_has_softecc_output_regs_b => 0,
      c_init_file_name => "SSROM.mif",
      c_inita_val => "0",
      c_initb_val => "0",
      c_interface_type => 0,
      c_load_init_file => 1,
      c_mem_type => 3,
      c_mux_pipeline_stages => 0,
      c_prim_type => 1,
      c_read_depth_a => 16,
      c_read_depth_b => 16,
      c_read_width_a => 7,
      c_read_width_b => 7,
      c_rst_priority_a => "CE",
      c_rst_priority_b => "CE",
      c_rst_type => "SYNC",
      c_rstram_a => 0,
      c_rstram_b => 0,
      c_sim_collision_check => "ALL",
      c_use_byte_wea => 0,
      c_use_byte_web => 0,
      c_use_default_data => 0,
      c_use_ecc => 0,
      c_use_softecc => 0,
      c_wea_width => 1,
      c_web_width => 1,
      c_write_depth_a => 16,
      c_write_depth_b => 16,
      c_write_mode_a => "WRITE_FIRST",
      c_write_mode_b => "WRITE_FIRST",
      c_write_width_a => 7,
      c_write_width_b => 7,
      c_xdevicefamily => "spartan3e"
    );
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_SSROM
  PORT MAP (
    clka => clka,
    addra => addra,
    douta => douta
  );
-- synthesis translate_on

END SSROM_a;

এটি এই বিষয়বস্তু দিয়ে শুরু করা হয়েছে:

memory_initialization_radix=2;
memory_initialization_vector=
0000001,
1001111,
0010010,
0000110,
1001100,
0100100,
0100000,
0001111,
0000000,
0000100,
0001000,
1100000,
0110001,
1000010,
0110000,
0111000,

এটি তিনটি পিনের আছে: clka, addraএবং douta। আমি জিইউআইয়ের সাথে একটি পরীক্ষা বেঞ্চও তৈরি করেছি, তারপর এটি সামান্য সম্পাদনা করেছি যাতে এটি 100 এনএস এর পরে ইনপুট পরিবর্তন করে:

   uut: SSROM PORT MAP (
          clka => clk,
          addra => addra,
          douta => douta
        );

   -- Clock process definitions
   clka_process :process
   begin
        clk <= '0';
        wait for clk_period/2;
        clk <= '1';
        wait for clk_period/2;
   end process;


   -- Stimulus process
   stim_proc: process
   begin        
      -- hold reset state for 100 ns.
      wait for 100 ns;  

      addra <= "0101";
      wait for 100 ns;

      wait;
   end process;

তবে আমি যখন সিমুলেশনটি চালাই, তখন doutaসিগন্যালের মান সর্বদা অপরিবর্তিত থাকে:

সিমুলেশন ফলাফল

কি দেয়?


আপনাকে সহায়তা করার জন্য আমাদের এসএসআরএম কোড দরকার।
ব্রায়ান কার্লটন

এটি কোন ফাইল? .xco?
ক্যাকটাস

1
.V বা .vhd। .xco মানুষের পাঠযোগ্য নয়।
ব্রায়ান কার্লটন

1
আপনি কি নিশ্চিত যে আপনি আপনার সিমুলেটারের জন্য গ্রন্থাগারটি সংকলন করেছেন? যদি আমি সঠিকভাবে মনে রাখি, Xilinx তার জন্য একটি ক্লাইট সরঞ্জাম 'xcomp' সরবরাহ করে। আপনার রম সিমুলেটর আউটপুটে আনবাউন্ড কিনা তা যাচাই করুন, সর্বোপরি, কোরজেন কেবল একটি লাইব্রেরির জন্য কিছু সেট প্যারামিটার সরবরাহ করে, প্রকৃত মূল যা সিমুলেটেড করা যায় না ...
বেনিবার্নস

1
আপনি যে কোড পোস্ট করেছেন তা দেখে মনে হচ্ছে এটি কাজ করা উচিত, যদিও আমি আপনার জন্য এটি পরীক্ষা করতে পারছি না কারণ আমি খুব কমই Xilinx ব্যবহার করি (আইএমও জিলিনক্স সরঞ্জামগুলি খারাপ, আমি সেগুলি এড়াতে পারি)। কোনও ম্যাক্রো ব্যবহার না করে কোনও রম অনুমান করা আরও ভাল এবং আরও বহনযোগ্য। একটি ধ্রুবক হতে কেবল std_logic_vectors এর একটি অ্যারের সংজ্ঞা দিন। (অর্থাত্ বিটের একটি দ্বিমাত্রিক অ্যারে) এটি কোনও শালীন সংশ্লেষণ এবং সিমুলেশন সরঞ্জামকে একটি রম প্রস্তাব করবে।
জেসন মরগান

উত্তর:


1

সিমুলেশন সরঞ্জামটি ব্যবহার করে আপনার এসএসআরএম মডিউলটির ভিতরে থাকা সংকেতগুলি দেখতে হবে। কখনও কখনও তাত্ক্ষণিক ভিতরে ইনপুট তাকান সমস্যা যেখানে অবস্থিত আলোকিত করতে সাহায্য করতে পারে। আপনি যে সংকেতটি ভেবেছিলেন এটি সংযুক্ত ছিল তা আসলে নয়।

তদন্তের জন্য আরেকটি জিনিস হ'ল আপনার .mif ফাইল। জিলিনেক্স সিমুলেশনের জন্য মেমরির বিষয়বস্তু সূচনা করতে সিমুলেশনগুলিতে একটি .mif ফাইল ব্যবহার করে। আপনি যদি অজান্তেই .mif ফাইলটি সরিয়ে বা মুছে ফেলে থাকেন তবে আপনি এর মতো ফলাফল দেখতে পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.