ভিজিটারের উপস্থাপনা বনাম ইন্টিগ্রেসের ব্যবহার কখন কম?


11

এই প্রশ্নের উত্তরের মন্তব্য থ্রেডে: ভিএইচডিএল সত্তার ভুল ফলাফলগুলি বলা হয়েছিল:

"পূর্ণসংখ্যার সাহায্যে আপনার এফপিজিএতে অভ্যন্তরীণ যুক্তি উপস্থাপনের নিয়ন্ত্রণ বা অ্যাক্সেস নেই, যখন এসএলভি আপনাকে ক্যারি চেইনকে দক্ষতার সাথে ব্যবহার করার কৌশলগুলি করতে দেয়"

সুতরাং, কোন পরিস্থিতিতে আপনি অভ্যন্তরীণ প্রতিনিধিত্ব অ্যাক্সেসের জন্য পূর্ণসংখ্যার গুলি ব্যবহারের চেয়ে বিট উপস্থাপনার ভেক্টর ব্যবহার করে কোডের নিকটতম দেখতে পেয়েছেন ? এবং কী কী সুবিধা আপনি মাপলেন (চিপ অঞ্চল, ঘড়ির ফ্রিকোয়েন্সি, বিলম্ব, বা অন্যথায়?)?


আমি মনে করি এটি পরিমাপ করা শক্ত কিছু, যেহেতু দৃশ্যত এটি নিম্ন-স্তরের বাস্তবায়নের উপর নিয়ন্ত্রণের বিষয়।
ক্লাবচিও

উত্তর:


5

আমি দু'জনেই পোস্টার দ্বারা প্রস্তাবিত কোডটি লিখেছি vectorএবংinteger ফর্ম, তদারক উভয় সংস্করণই সম্ভব হিসাবে অনুরূপ উপায় হিসেবে কাজ করে।

আমি সিমুলেশনে ফলাফলগুলি তুলনা করেছি এবং তারপরে সিনপ্লিফাই প্রো টার্গেটিং জিলিনেক্স স্পার্টান using ব্যবহার করে সংশ্লেষিত করেছি 6. নীচের কোডের নমুনাগুলি কার্য কোড থেকে আটকানো হয়েছে, সুতরাং আপনার পছন্দসই সিন্থাইজারের সাহায্যে এগুলি ব্যবহার করতে সক্ষম হওয়া উচিত এবং এটি একইরকম আচরণ করে কিনা তা দেখতে পারা উচিত।


Downcounters

প্রথমত, ডাউনকাউন্টার, ডেভিড কেসনার পরামর্শ অনুযায়ী:

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

entity downcounter is
    generic (top : integer);
    port (clk, reset, enable : in  std_logic; 
         tick   : out std_logic);
end entity downcounter;

ভেক্টর আর্কিটেকচার:

architecture vec of downcounter is
begin
    count: process (clk) is
        variable c : unsigned(32 downto 0);  -- don't inadvertently not allocate enough bits here... eg if "integer" becomes 64 bits wide
    begin  -- process count
        if rising_edge(clk) then  
            tick <= '0';
            if reset = '1' then
                c := to_unsigned(top-1, c'length);
            elsif enable = '1' then
                if c(c'high) = '1' then
                    tick <= '1';
                    c := to_unsigned(top-1, c'length);
                else
                    c := c - 1;
                end if;
            end if;
        end if;
    end process count;
end architecture vec;

পূর্ণসংখ্যার আর্কিটেকচার

architecture int of downcounter is
begin
    count: process (clk) is
        variable c : integer;
    begin  -- process count
        if rising_edge(clk) then  
            tick <= '0';
            if reset = '1' then
                c := top-1;
            elsif enable = '1' then
                if c < 0 then
                    tick <= '1';
                    c := top-1;
                else
                    c := c - 1;
                end if;
            end if;
        end if;
    end process count;
end architecture int;

ফলাফল

কোড-ভিত্তিক, to_unsigned()কলটি এড়ানোর কারণে পূর্ণসংখ্যাটি আমার কাছে পছন্দনীয় বলে মনে হয় । অন্যথায়, পছন্দ করার মতো বেশি কিছু নয়।

এটি Synplify প্রো দিয়ে চালনা করে সংস্করণটির জন্য 66 LUTs এবং সংস্করণটির জন্য 64 LUTs top := 16#7fff_fffe#উত্পাদন করে । উভয় সংস্করণ বহন-শৃঙ্খলা ব্যবহার করে। উভয়ই ঘড়ির গতি বেশি রিপোর্ট করেvectorinteger 280MHz এর । সিনথেসাইজারটি ক্যারি চেইনের ভাল ব্যবহার প্রতিষ্ঠা করতে যথেষ্ট সক্ষম - আমি আরটিএল দর্শকের সাথে দৃষ্টিভঙ্গি যাচাই করেছিলাম যে উভয়ের সাথে একই রকম যুক্তি তৈরি হয়। স্পষ্টতই তুলনাকারীর সাথে একটি আপ-কাউন্টার বড় হবে, তবে এটি আবার পূর্ণসংখ্যা এবং ভেক্টর উভয়ের সাথে একই হবে।


2 ** এন কাউন্টার দ্বারা ভাগ করা

Ajs410 দ্বারা প্রস্তাবিত:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity clkdiv is
    port (clk, reset : in     std_logic;
        clk_2, clk_4, clk_8, clk_16  : buffer std_logic);
end entity clkdiv;

ভেক্টর আর্কিটেকচার

architecture vec of clkdiv is

begin  -- architecture a1

    process (clk) is
        variable count : unsigned(4 downto 0);
    begin  -- process
        if rising_edge(clk) then  
            if reset = '1' then
                count  := (others => '0');
            else
                count := count + 1;
            end if;
        end if;
        clk_2 <= count(0);
        clk_4 <= count(1);
        clk_8 <= count(2);
        clk_16 <= count(3);
    end process;

end architecture vec;

পূর্ণসংখ্যার আর্কিটেকচার

কেবলমাত্র ব্যবহার না করা to_unsignedএবং তারপরে বিটগুলি বাছাই করতে আপনাকে কিছু হুপ দিয়ে যেতে হবে যা পরিষ্কারভাবে উপরের মতো একই প্রভাব তৈরি করবে:

architecture int of clkdiv is
begin
    process (clk) is
        variable count : integer := 0;
    begin  -- process
        if rising_edge(clk) then  
            if reset = '1' then
                count  := 0;
                clk_2  <= '0';
                clk_4  <= '0';
                clk_8  <= '0';
                clk_16 <= '0';
            else
                if count < 15 then
                    count := count + 1;
                else
                    count := 0;
                end if;
                clk_2 <= not clk_2;
                for c4 in 0 to 7 loop
                    if count = 2*c4+1 then
                        clk_4 <= not clk_4;
                    end if;
                end loop; 
                for c8 in 0 to 3 loop
                    if count = 4*c8+1 then
                        clk_8 <= not clk_8;
                    end if;
                end loop; 
                for c16 in 0 to 1 loop
                    if count = 8*c16+1 then
                        clk_16 <= not clk_16;
                    end if;
                end loop; 
            end if;
        end if;
    end process;
end architecture int;

ফলাফল

কোড-ভিত্তিক, এক্ষেত্রে, vector সংস্করণটি আরও ভাল!

সংশ্লেষণের ফলাফলের ক্ষেত্রে, এই ছোট উদাহরণের জন্য, সংখ্যার ভার্সন (যেমনটি এজেএস 410 পূর্বাভাস হিসাবে) তুলনাকারীর অংশ হিসাবে 3 অতিরিক্ত এলইউটি উত্পাদন করে, সংশ্লেষ সম্পর্কে আমি খুব আশাবাদী ছিলাম, যদিও এটি কোডের একটি ভয়াবহ অবহেলিত অংশের সাথে কাজ করছে!


অন্যান্য ব্যবহার

যখন আপনি গাণিতিককে মোড়ানো-চারপাশে করতে চান তখন ভেক্টরগুলি একটি পরিষ্কার জয় (কাউন্টারগুলি একটি লাইন হিসাবে এমনকি করা যেতে পারে):

vec <= vec + 1 when rising_edge(clk);

বনাম

if int < int'high then 
   int := int + 1;
else
   int := 0;
end if;

যদিও কমপক্ষে এটি কোড থেকে স্পষ্ট যে লেখক প্রায় একটি মোড়ানো উদ্দেশ্য।


এমন কিছু যা আমি রিয়েল-কোডে ব্যবহার করি নি, তবে চিন্তিত:

"প্রাকৃতিকভাবে মোড়ানো" বৈশিষ্ট্যটি "ওভারফ্লোগুলির মাধ্যমে কম্পিউটিং" এর জন্যও ব্যবহার করা যেতে পারে। যখন আপনি জানেন যে সংযোজন / বিয়োগগুলি এবং গুণাগুলির একটি শৃঙ্খলের আউটপুট সীমাবদ্ধ, আপনি মধ্যবর্তী গণনার উচ্চ বিটগুলি সংরক্ষণ করতে হবে না (২-এস পরিপূরক হিসাবে) এটি "ধোয়াতে" বেরিয়ে আসবে আপনি আউটপুট পেতে সময় দ্বারা। আমাকে বলা হয়েছে যে এই কাগজটিতে এর একটি প্রমাণ রয়েছে, তবে দ্রুত মূল্যায়ন করা আমার কাছে কিছুটা ঘন লাগছিল! কম্পিউটার সংযোজন এবং ওভারফ্লোগুলির তত্ত্ব - এইচএল গারনার

integerএই পরিস্থিতিতে এস ব্যবহার করার ফলে তারা মোড়ানো অবস্থায় সিমুলেশন ত্রুটির কারণ হতে পারে, যদিও আমরা জানি তারা শেষ পর্যন্ত মোড়ক করবে।


এবং ফিলিপ যেমন উল্লেখ করেছেন, আপনার যখন 2 ** 31 এর চেয়ে বড় সংখ্যার প্রয়োজন তখন আপনার ভেক্টর ব্যবহার করা ছাড়া কোনও বিকল্প নেই।


দ্বিতীয় কোড ব্লকে আপনার কাছে variable c : unsigned(32 downto 0);... cতখন কি 33 বিটের পরিবর্তনশীল নয় ?
ক্লাবচিও

@ ক্লাব্যাচ্চিও: হ্যাঁ, এটি মোড়কের চারপাশে 'ক্যারি-বিট' অ্যাক্সেসের অনুমতি দেয়।
মার্টিন থম্পসন

5

যখন VHDL লেখা, আমি অত্যন্ত জন্য std_logic_vector (SLV) পূর্ণসংখ্যা (int-) পরিবর্তে ব্যবহার করার প্রস্তাব সংকেত । (অন্যদিকে জেনেরিকের জন্য ইন্ট ব্যবহার করা, কিছু ধ্রুবক এবং কিছু ভেরিয়েবলগুলি অত্যন্ত দরকারী) কিছু ভুল.

ইন্টের সাথে সমস্যাটি হ'ল ভিএইচডিএল প্রোগ্রামারটির কোনও অভ্যন্তরীণ লজিক উপস্থাপনা কী তা সম্পর্কে কোনও ধারণা নেই এবং তাই আমরা এর সুবিধা নিতে পারি না। উদাহরণস্বরূপ, যদি আমি 1 থেকে 10 এর পরিসীমাটির সংজ্ঞা দেয় তবে কম্পাইলার কীভাবে এই মানগুলিকে এনকোড করে তা আমার কোনও ধারণা নেই। আশা করি এটি 4 বিট হিসাবে এনকোড করা হবে, তবে আমরা এর বেশি কিছু জানি না। আপনি যদি এফপিজিএ-র অভ্যন্তরে সংকেতগুলি অনুসন্ধান করতে পারেন তবে এটি "0001" থেকে "1010" হিসাবে এনকোড হতে পারে বা "0000" থেকে "1001" হিসাবে এনকোড করা হতে পারে। এটি এটিও সম্ভব যে এটি এমনভাবে এনকোড করা হয়েছে যা আমাদের মানুষের কাছে একেবারেই কোনও ধারণা রাখে না।

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

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

সুতরাং, যেমনটি আমি বলেছি, এসএলভি দিয়ে বিট এনকোডিংগুলিতে আপনার নিয়ন্ত্রণ থাকে এবং বিটগুলিতে সরাসরি অ্যাক্সেস থাকে। সুতরাং আপনি এই কি করতে পারেন? আমি আপনাকে কয়েকটি উদাহরণ দেখাব। ধরা যাক যে প্রতি 4,294,000,000 ঘড়িতে আপনাকে একবার ডাল আউটপুট করতে হবে। আপনি কীভাবে এটি ব্যবহার করবেন এটি এখানে:

signal count :integer range 0 to 4293999999;  -- a 32 bit integer

process (clk)
begin
  if rising_edge(clk) then
    if count = 4293999999 then  -- The important line!
      count <= 0;
      pulse <= '1';
    else
      count <= count + 1;
      pulse <= '0';
    end if;
  end if;
end process;

এবং এসএলভি ব্যবহার করে একই কোড:

use ieee.numeric_std.all;
signal count :std_logic_vector (32 downto 0);  -- a 33 bit integer, one extra bit!

process (clk)
begin
  if rising_edge(clk) then
    if count(count'high)='1' then   -- The important line!
      count <= std_logic_vector(4293999999-1,count'length);
      pulse <= '1';
    else
      count <= count - 1;
      pulse <= '0';
    end if;
  end if;
end process;

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

পার্থক্যটি "গুরুত্বপূর্ণ লাইনে" রয়েছে।

অন্তর্নিহিত উদাহরণ সহ, এটি একটি 32-ইনপুট তুলনামূলক হতে চলেছে। শিলিনেক্স স্পার্টান -3 ব্যবহার করে 4-ইনপুট LUT এর সাথে, এর জন্য 11 টি LUTs এবং 3 স্তরের যুক্তির প্রয়োজন হবে। কিছু সংকলক এটি এটিকে বিয়োগে রূপান্তর করতে পারে যা বহনকারী শৃঙ্খলা ব্যবহার করবে এবং 32 LUT এর সমতুল্য ছড়িয়ে দেবে তবে 3 স্তরের যুক্তির চেয়ে দ্রুত চলবে।

Slv উদাহরণ সহ, 32-বিটের তুলনা নেই তাই এটি "শূন্য LUT's, যুক্তির শূন্য স্তর"। একমাত্র জরিমানা হ'ল আমাদের কাউন্টারটি একটি অতিরিক্ত বিট। কারণ এই অতিরিক্ত বিট কাউন্টারের অতিরিক্ত সময় নির্ধারণের সমস্তটি ক্যারি চেইনে রয়েছে, "প্রায় শূন্য" অতিরিক্ত সময় নির্ধারণের বিলম্ব রয়েছে।

অবশ্যই এটি একটি চূড়ান্ত উদাহরণ, কারণ বেশিরভাগ মানুষ এইভাবে 32-বিট কাউন্টার ব্যবহার করবেন না। এটি ছোট কাউন্টারগুলিতে প্রযোজ্য, তবে তফাতটি কম নাটকীয় হলেও তাত্পর্যপূর্ণ হলেও।

দ্রুত সময় নির্ধারণের জন্য কীভাবে স্লভকে ইনট এর মাধ্যমে ব্যবহার করতে হয় তার একমাত্র উদাহরণ। স্লভ ব্যবহারের আরও অনেকগুলি উপায় রয়েছে - এটি কেবল কিছু কল্পনা করে takes

আপডেট: "যদি (গণনা -১) <0" এর সাথে int ব্যবহারের বিষয়ে মার্টিন থম্পসনের মন্তব্যগুলিকে সম্বোধন করার জন্য স্টাফ যুক্ত করা হয়েছে

(দ্রষ্টব্য: আমি ধরে নিলাম আপনার অর্থ "যদি গণনা <0" হয় তবে এটি আমার এসএলভি সংস্করণের তুলনায় আরও সমতুল্য হয়ে উঠবে এবং সেই অতিরিক্ত বিয়োগের প্রয়োজনীয়তা সরিয়ে ফেলবে))

কিছু পরিস্থিতিতে এটি উদ্দেশ্যযুক্ত যুক্তি বাস্তবায়ন উত্পন্ন করতে পারে তবে এটি সমস্ত সময় কাজ করার গ্যারান্টিযুক্ত নয়। এটি আপনার কোড এবং আপনার সংকলকটি কী কী মানকে এনকোড করে তার উপর নির্ভর করবে।

আপনার সংকলকটির উপর নির্ভর করে এবং আপনি কীভাবে আপনার পূর্বনির্ধারার পরিসরটি নির্দিষ্ট করেন, এটি সম্পূর্ণভাবে সম্ভব যে শূন্যের কোনও মান মান "0000 ... 0000" এর বিট ভেক্টরে এনকোড না করে যখন এটি এফপিজিএ যুক্তিযুক্ত করে তোলে। আপনার প্রকরণের কাজ করার জন্য এটি অবশ্যই "0000 ... 0000" এ এনকোড করবে।

উদাহরণস্বরূপ, ধরা যাক আপনি -5 থেকে +5 এর পরিসীমা থাকতে কোনও সংজ্ঞা নির্ধারণ করেন। আপনি "0000" এর মতো 4 বিটে এনকোড হওয়া 0 এবং "5101" হিসাবে +5 এবং "1011" হিসাবে -5 এর মান আশা করছেন। এটি টিপিক্যাল টোভস-পরিপূরক এনকোডিং স্কিম।

তবে ধরে নিবেন না যে সংকলকটি দ্বিগুণ-পরিপূরক ব্যবহার করবে। অস্বাভাবিক হলেও, পরিপূরকগুলির ফলে "আরও ভাল" যুক্তি দেখা দিতে পারে। অথবা, সংকলকটি "পক্ষপাতদুষ্ট" এনকোডিংয়ের একটি ধরণের ব্যবহার করতে পারে যেখানে -5 "0000", 0 "" 0101 "হিসাবে এবং +5" 1010 "হিসাবে এনকোড করা আছে।

যদি আন্তের এনকোডিংটি "সঠিক" হয় তবে সংকলক সম্ভবত ক্যারি বিটের সাথে কী করবেন তা নির্ধারণ করবে। তবে এটি যদি ভুল হয় তবে ফলাফলযুক্ত যুক্তিটি ভয়াবহ হবে।

এটি সম্ভব যে এই উপায়ে কোনও ইন্ট ব্যবহার করা যুক্তিসঙ্গত যুক্তির আকার এবং গতি পেতে পারে তবে এটি কোনও গ্যারান্টি নয়। একটি অন্য সংকলক (উদাহরণস্বরূপ সিনস্টেসিসে এক্সএসটি) এ স্যুইচ করা, বা অন্য কোনও এফপিজিএ আর্কিটেকচারে যাওয়া সঠিক ভুল জিনিসটি ঘটতে পারে।

স্বাক্ষরযুক্ত / স্বাক্ষরিত বনাম এসএলভি আরও একটি বিতর্ক। আমাদের ভিএইচডিএলে অনেকগুলি বিকল্প দেওয়ার জন্য আপনি মার্কিন সরকার কমিটিকে ধন্যবাদ জানাতে পারেন। :) আমি এসএলভি ব্যবহার করি কারণ এটি মডিউল এবং কোরগুলির মধ্যে ইন্টারফ্যাকিংয়ের মান। সিমুলেশনগুলির চেয়ে অন্য কিছু এবং সিমুলেশনগুলির ক্ষেত্রে, আমি মনে করি না যে স্বাক্ষরিত / স্বাক্ষরযুক্ত ওভারে এসএলভি ব্যবহার করার একটি বিশাল সুবিধা রয়েছে। আমি স্বাক্ষরিত / স্বাক্ষরযুক্ত সমর্থন ত্রি-বর্ণিত সংকেতগুলি নিশ্চিত কিনা তাও নিশ্চিত নই।


4
ডেভিড, এই কোড টুকরা সমতুল্য নয়। এক শূন্য থেকে একটি স্বেচ্ছাসেবী সংখ্যায় গুনে (একটি ব্যয়বহুল তুলনা অপারেটর সহ); অন্য একটি স্বেচ্ছাসেবী সংখ্যা থেকে শূন্য নেমে গণনা। আপনি উভয়ই ইন্টিজার বা ভেক্টর দিয়ে অ্যালগরিদম লিখতে পারেন এবং একটি স্বেচ্ছাসেবী সংখ্যার দিকে গণনা করার সময় এবং ভাল ফলাফল শূন্যের দিকে গণনা করার সময় আপনি খারাপ ফলাফল পাবেন। লক্ষ্য করুন সফ্টওয়্যার প্রকৌশলীরা হবে এছাড়াও যদি তারা একটি গরম গোষ্ঠীর বাইরে একটু বেশি কর্মক্ষমতা আলিঙ্গন প্রয়োজন শুন্যতে কাউন্ট ডাউন।
ফিলিপ

1
ফিলিপের মতো আমিও নিশ্চিত নই যে এটি একটি বৈধ তুলনা। যদি পূর্ণসংখ্যার উদাহরণটি গণনা করা হয় এবং if (count-1) < 0আমি ব্যবহার করি তবে মনে করি সিনথেসাইজারটি বহন বিটকে অনুমান করবে এবং আপনার এসএলভি উদাহরণের মতো একই সার্কিট তৈরি করবে। এছাড়াও, আমরা কি unsignedআজকাল টাইপটি ব্যবহার করব না :)
মার্টিন থম্পসন

2
@ ডেভিডকেশনার আপনি অবশ্যই একটি তাত্পর্যপূর্ণ এবং যুক্তিসঙ্গত উত্তর সরবরাহ করেছেন, আপনি আমার +1 পেয়েছেন। যদিও আমাকে জিজ্ঞাসা করতে হবে ... আপনি কেন পুরো নকশা জুড়ে অপ্টিমাইজেশন সম্পর্কে উদ্বিগ্ন? কোডের প্রয়োজনীয়তার ক্ষেত্রে আপনার প্রচেষ্টাগুলিকে কেন্দ্রীকরণের জন্য ইন্টারফেস পয়েন্ট (সত্তা বন্দর) এর জন্য এসএলভিগুলিতে ফোকাস করা ভাল নয়? আমি জানি যে আমার বেশিরভাগ ডিজাইনে আমি বিশেষভাবে যত্ন করি না যতক্ষণ না এটি সময়সীমার সাথে মিলিত হয় এবং অংশটি ফিট করে L আমার যদি বিশেষভাবে কড়া প্রতিবন্ধকতা থাকে তবে আমি অবশ্যই সর্বোত্তম নকশা সম্পর্কে আরও সচেতন হই, তবে সাধারণ নিয়ম হিসাবে না।
akohlsmith

2
আমি এই উত্তরের ভোটের সংখ্যা দ্বারা কিছুটা বাড়িয়েছি। @ বিট_ভেক্টর @ অবশ্যই মাইক্রো-আর্কিটেকচারের মডেলিং এবং অনুকূলকরণের জন্য সঠিক বিমূর্ততা স্তর, তবে একটি সাধারণ সুপারিশ আবার "উচ্চ-স্তরের" ধরণের যেমন সংকেতগুলির জন্য @ পূর্ণসংখ্যার @ যা আমার কাছে অদ্ভুত বলে মনে হয়। আমি এই বৈশিষ্ট্যগুলি সরবরাহ করে তার মূল্য জানার জন্য বিমূর্ততার অভাবের কারণে আমি যথেষ্ট সংশ্লেষিত এবং অপঠনযোগ্য কোড দেখেছি এবং যদি আমি তাদের পিছনে ফেলে যেতে পারি তবে খুব দুঃখিত হবে।
20:43

2
@ ডেভিড চমৎকার মন্তব্য। এটি সত্য যে আমরা এখনও মধ্যযুগীয় যুগে অনেকগুলি উপায়ে সফ্টওয়্যার বিকাশের তুলনায়, তবে কোয়ার্টাস ইন্টিগ্রেটেড সংশ্লেষণ এবং সাইনপ্লাইফের সাথে আমার অভিজ্ঞতা থেকে আমি মনে করি না যে বিষয়গুলি খারাপ। তারা রেজিস্ট্রেশন রিটিমিং এবং অন্যান্য অপ্টিমাইজেশনের মতো অনেক কিছুই পরিচালনা করতে সক্ষম যা পাঠযোগ্যতা বজায় রেখে পারফরম্যান্সের উন্নতি করে। আমি সন্দেহ করি যে সংখ্যাগরিষ্ঠরা বেশ কয়েকটি সরঞ্জামচেন এবং ডিভাইসকে লক্ষ্যবস্তু করছে, তবে আপনার ক্ষেত্রে আমি সর্বনিম্ন সাধারণ ডিনোমিনেটরের প্রয়োজনীয়তাটি বুঝতে পারি :-)।
21:15

2

আমার পরামর্শ হ'ল উভয়ই চেষ্টা করে দেখুন এবং তারপরে সংশ্লেষণ, মানচিত্র এবং স্থান এবং রুটের প্রতিবেদনগুলি দেখুন। এই প্রতিবেদনগুলি আপনাকে জানায় যে প্রতিটি পদ্ধতির সঠিকভাবে কতগুলি LUT ব্যবহার করা হচ্ছে, তারা আপনাকে লজিকটি সর্বাধিক গতিতে চালিত করতে বলে দেবে।

আমি ডেভিড কেসনারের সাথে একমত যে আপনি নিজের সরঞ্জামচেনের করুণায় রয়েছেন, এবং কোনও "সঠিক" উত্তর নেই। সংশ্লেষ হ'ল কালো যাদু এবং কী ঘটেছিল তা জানার সর্বোত্তম উপায় হ'ল উত্পাদিত প্রতিবেদনগুলি যত্ন সহকারে এবং পুঙ্খানুপুঙ্খভাবে পড়া read জিলিনেক্স সরঞ্জামগুলি এমনকি প্রতিটি এলইটি কে কীভাবে প্রোগ্রাম করা হয়, ক্যারি চেইন কীভাবে সংযুক্ত থাকে, কীভাবে সুইচ ফ্যাব্রিক সমস্ত এলটিউইকে সংযুক্ত করে ইত্যাদি এখানের নীচে সরাসরি এফপিজিএ দেখার অনুমতি দেয় etc.

মিঃ কেসনারের পদ্ধতির আরেকটি নাটকীয় উদাহরণের জন্য, কল্পনা করুন যে আপনি একাধিক ঘড়ির ফ্রিকোয়েন্সি 1/2, 1/4, 1/8, 1/16 ইত্যাদিতে রাখতে চান ger এবং তারপরে সেই সংখ্যার মানটির বিপরীতে একাধিক তুলক রয়েছে, প্রতিটি তুলনাকারী আউটপুট একটি আলাদা ক্লক বিভাগ গঠন করে। তুলনাকারীর সংখ্যার উপর নির্ভর করে, ফ্যানআউটটি অযৌক্তিকভাবে বড় হয়ে উঠতে পারে এবং কেবল বাফারিংয়ের জন্য অতিরিক্ত এলইউটি গ্রহণ করা শুরু করতে পারে। এসএলভি পদ্ধতির ভেক্টরের প্রতিটি স্বতন্ত্র বিট আউটপুট হিসাবে গ্রহণ করবে।


1

এর একটি সুস্পষ্ট কারণ হ'ল স্বাক্ষরিত এবং স্বাক্ষরযুক্ত 32 বিট পূর্ণসংখ্যার চেয়ে বড় মানকে অনুমতি দেয়। এটি ভিএইচডিএল ভাষার নকশায় একটি ত্রুটি, এটি অপরিহার্য নয়। ভিএইচডিএলের একটি নতুন সংস্করণ এটি ঠিক করতে পারে, স্বেচ্ছাসেবী আকারকে সমর্থন করার জন্য পূর্ণসংখ্যার মানগুলির প্রয়োজন হয় (জাভা এর বিগ আইন্টের অনুরূপ)।

এগুলি ব্যতীত, আমি ভেন্টারের তুলনায় পূর্ণসংখ্যার জন্য পৃথকভাবে সম্পাদনকারী মানদণ্ডগুলি সম্পর্কে শুনতে খুব আগ্রহী।

বিটিডাব্লু, জান ডালালুওয়ে একটি সুন্দর প্রবন্ধ লিখেছিলেন: এই ইনটগুলি তৈরি করা হয়েছে কাউন্টিনের জন্য '


ধন্যবাদ ফিলিপ (যদিও এটি "অভ্যন্তরীণ প্রতিনিধিত্বের মাধ্যমে" অ্যাক্সেসের মাধ্যমে আরও ভাল "নয়, যা আমি সত্যই পরে যাচ্ছি ...)
মার্টিন থম্পসন

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

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

@ ফিলিপ না, আমি বোঝাতে চাইছি যে আপনি যদি সংশ্লেষণের ফলাফলগুলি সম্পর্কে মোটেই যত্নবান হন তবে এটি একটি রায় রায়। সংশ্লেষণের ফলাফলগুলি নিজেরাই রায় দেওয়ার আহ্বান নয়।

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