Bài học SYSTEMC 5: Kiểu dữ liệu trong SystemC (p1)

Lu ROm

Administrator
Staff member
25 Tháng bảy 2014
481
119
43
31
One piece
vimach.net
I. Giới thiệu
upload_2016-7-25_9-18-43.png

- SystemC có một số kiểu dữ liệu đã xác định trước nhằm hỗ trợ thiết kế phần cứng trải rộng từ kiểu dữ liệu C++ đến biểu diễn fixed-point. Chọn kiểu dữ liệu phụ thuộc vào phạm vi của giá trị được đại diện. Lựa chọn kiểu dữ liệu cũng ảnh hưởng đến tốc độ của kết quả mô phỏng, synthesizability, và tổng hợp. Các kiểu dữ liệu sử dụng khác nhau tùy thuộc vào mức độ trừu tượng trong mô hình của bạn.
  • C++ Data Types
  • Bit Type
  • Logic Type
  • Arbitrary Width Bit Type
  • Arbitrary Width Logic Type
  • Signed Integer Type
  • Unsigned Integer Type
  • Arbitrary Precision Signed Integer Type
  • Arbitrary Precision Unsigned Integer Type
  • Resolved Types
  • User-defined Data Types
1. Biểu diễn Numeric
- Để hỗ trợ biểu diễn dữ liệu phần cứng, SystemC cung cấp biễu diễn chuỗi hợp nhất sử dụng chuỗi C-style. Nó có thể chuyển đổi cả đến và đi từ định dạng này. SystemC sử dụng cú pháp sau đây cho các chuỗi:
upload_2016-7-25_9-18-59.png

- Trong đó:
  • name: Tên của biến.
  • base: b cho nhị phân, o cho bát phân, d cho số thập phân và x cho hexadecimal.
  • sign: us cho unsigned, sm cho signed magnitute, csd cho canonical signed digit.
  • number: là một số nguyên.
  • exp: Lũy thừa exp tùy chọn luôn được chỉ định sử dụng số thập phân.
- Có 11 kiểu biễu diễn dữ liệu cụ thể của SystemC LRM được thể hiện trong bảng dưới đây. Chú ý cột liệt kê, sc_numrep, được sử dụng khi chuyển đổi thành một chuỗi unified .
*** Ví dụ:
Mã:
sc_string a ("0d13"); // decimal 13
a = sc_string ("0b101110") ; // binary of decimal 44
2. Kiểu dữ liệu Native
- SystemC hỗ trợ tất cả các kiểu dữ liệu C ++ cơ bản như: int, long int, int, unsigned int, unsigned long int, unsigned short int, short, double, float, char, và bool..
- Đối với nhiều thiết kế SystemC, chỉ cần kiểu dữ liệu C ++ là đủ. Kiểu dữ liệu C ++ hiệu quả nhất trong việc sử dụng bộ nhớ và tốc độ thực hiện mô phỏng.
upload_2016-7-25_9-34-55.png


3. Kiểu dữ liệu Arithmetic
a. sc_int và sc_uint

- sc_int là số nguyên có dấu, và nó được cố định với kích thước 64 bit. Các phép toán cơ bản sử dụng 64bit, kích thước kết quả được xác định tại phần khai báo đối tượng. Trong sc_int các giá trị được lưu trữ trong 2's compliment. Với số nguyên có dấu, bit dấu biễu diễn cho sc_int có độ rộng Nbit được lưu trữ tại vị trí N-1bit. Cú pháp khai báo như sau:
upload_2016-7-25_9-52-42.png

- sc_uint là khai báo số nguyên không dấu.
b. sc_bigint và sc_biguint
- Một số phần cứng có thể lớn hơn so với những con số được hỗ trợ bởi kiểu dữ liệu C ++ gốc. SystemC cung cấp sc_bigintsc_biguint cho mục đích này. Những loại dữ liệu cung cấp hỗ trợ số lớn hơn thì tốc độ mô phỏng sẽ chậm hơn.
** Chú ý: không sử dụng sc_bigintsc_biguint cho kiểu dữ liệu có độ rộng ít hơn hoặc bằng 64bit.
upload_2016-7-25_9-58-53.png

*** Ví dụ cho cả mục a và b
Mã:
// SystemC integer data types
sc_int<5> seat_position=3; //5 bits: 4 plus sign
sc_uint<13> days_SLOC(4000); //13 bits: no sign
sc_biguint<80> revs_SLOC; // 80 bits: no sign

4. Kiểu dữ liệu Boolean và Multi-Value.
a. sc_bit và sc_bv

- sc_bit là kiểu bit, có hai giá trị '0' và '1'. Trường hợp 1 biểu diễn true và 0 biểu diễn cho false. Với dữ liệu có độ rộng biet thì kiểu sc_bv được sử dụng. sc_bit và sc_bv hỗ trợ các phép toán như and,or,xor và một số phép toán khác.
upload_2016-7-25_10-11-23.png

** Ví dụ:
Mã:
sc_bit flag(SC_LOGIC_1); // more efficient to use bool
sc_bv<5> positions = "01101";
sc_bv<6> mask = "100111";
sc_bv<5> active = positions & mask;// 00101
sc_bv<1> all = active. and_reduce (); // SC_LOGIC_0
positions. range (3,2) = "00"; // 00001
positions [2] = active[0] ^ flag;
b. sc_logic và sc_lv
- Hai kiểu dữ liệu trên là kiểu dữ liệu đa giá trị biểu diễn cho giá trị unknown và trở kháng cao. Các kiểu được đại diện với SC_LOGIC_1, SC_LOGIC_0, SC_LOGIC_X, và SC_LOGIC_Z. Kiểu dữ liệu này sẽ mô phỏng chậm hơn sc_bit và sc_bv. Tốt nhất nên sử dụng sc_bit và sc_bv.
  • '0': false
  • '1': true
  • 'X' or 'x': không biết hoặc không xác định được giá trị
  • 'Z' or 'z': high-impedance

upload_2016-7-25_10-24-7.png

** Ví dụ:
Mã:
sc_logic buf(sc_dt::Log_Z);
sc_lv<8> data_drive ("zz01XZ1Z") ;
data_drive.range (5,4) = "ZZ";// ZZZZXZ1Z
buf = '1';
5. Toán tử trong SystemC
- Các loại dữ liệu SystemC hỗ trợ tất cả các toán tử phổ biến với quá tải toán tử.
upload_2016-7-25_10-33-40.png

- SystemC cung cấp phương pháp đặc biệt để truy cập vào các bit, các dãy bit, và thực hiện chuyển đổi.
upload_2016-7-25_10-35-7.png

- Toán tử so sánh:
upload_2016-7-25_10-38-29.png