ভেরিলোগে কীভাবে এক্সপ্রেশন বিট প্রস্থটি কেটে যাবে?


11

মত প্রকাশ করুন:

assign x = func(A) ^ func(B);

যেখানে ফানকের আউটপুট 32 বিট প্রশস্ত এবং এক্স 16 বিটের একটি তারের। আমি ফলাফলযুক্ত xor এর মধ্যে সর্বনিম্ন 16 বিট বরাদ্দ করতে চাই।

আমি জানি যে উপরের কোডটি ইতিমধ্যে তা করে তবে এটি একটি সতর্কতাও উত্পন্ন করে। "সুস্পষ্ট" পদ্ধতির কাজ হয় না:

assign x = (func(A) ^ func(B))[15:0]; // error: '[' is unexpected

উত্তর:


8

আপনি অন্য পরিবর্তনশীল ব্যবহার করতে পারেন, যদিও এটি বিশেষভাবে মার্জিত নয়।

wire[31:0] y;

assign y = func(A) ^ func(B);
assign x = y[15:0];

একটি ফাংশন ব্যবহার করা একটি ভাল পদ্ধতির হতে হবে।

function [15:0] trunc_32_to_16(input [31:0] val32);
  trunc_32_to_16 = val32[15:0];
endfunction

assign x = trunc_32_to_16(func(A) ^ func(B));

আমি আশা করছিলাম যে এর চেয়ে সুন্দর কিছু থাকবে ... ওহ ভাল, আমি কেবল বিশাল সংখ্যক ট্র্যাঙ্কেটিং ফাংশন তৈরি করব।
ব্যবহারকারী 23106

5

আপনার উদাহরণে, আপনি বিটগুলি সুস্পষ্টভাবে কাটছেন।

ছাঁটাইকে সুস্পষ্ট করে তোলা প্রায়শই সিমুলেশন / লিন্ট / সংশ্লেষণে সতর্কতাগুলি সরিয়ে ফেলতে পারে।

এই লাইনটি করার একটি উপায় হ'ল একটি কাস্ট অপারেটর ব্যবহার করা, যেমন:

typedef logic [15:0] HALF_WORD;
assign x = HALF_WORD'((func(A) ^ func(B));

এই পদ্ধতির অর্থ হতে পারে যদি প্রসঙ্গ থেকে স্পষ্ট হয় যে সমস্ত বিট বাদ দেওয়া হচ্ছে 0 এর।

যদি বিট কিছু অশূন্য হতে পারে তারপর আমি এখনও আগের প্রস্তাব @dwikle মত কোন মধ্যবর্তী নেট ব্যবহার সুপারিশ করবে উত্তর , যেহেতু এটা আরো স্পষ্ট আসলে আপনি বিট ফেলে দিচ্ছে তোলে। এখানে এটি আবার রেফারেন্সের জন্য।

wire[31:0] y;

assign y = func(A) ^ func(B);
assign x = y[15:0];

1
আমি মনে করি এটি কেবল সিস্টেমভাইরোগে কাজ করবে। কম আকর্ষণীয়।
টম কার্পেন্টার

@ টমক্যারপেন্টার, আপনি কি নতুন ইউনিফাইড আইইইই স্ট্যান্ড 1800 সংশোধনগুলির মধ্যে একটিতে সংশ্লেষযোগ্য ভেরিলোগের সম্পূর্ণ সেটটি ব্যবহার না করে আইইইই স্ট্যান্ড 1364-2005-এ উপলব্ধ ভেরিলোগের উপসেটটিতে সীমাবদ্ধ রাখতে চান? আপনি ভেরিলোগ -২০০ 2005 বা স্পষ্ট করার জন্য কিছু বলতে চাইতে পারেন, যেহেতু ভেরিলোগ স্ট্যান্ডার্ডটি ২০০৯ সালে ইউনিফাইড সিস্টেমভেরিলগ স্ট্যান্ডার্ডে গৃহীত হয়েছিল।
ম্যাটগেটলি

3

আমি মনে করি এটি লাইন গণনা রাখতে পারে।

wire [15:0] not_used ;

assign {not_used, x} = (func(A) ^ func(B));

যদিও এটি নির্ধারণের সাথে বৈধ কিনা তা নিশ্চিত নন।

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