
# Data Types
Data types là việc phân loại dữ liệu thành một danh mục theo các thuộc tính của nó. Với SystemC có thể chia làm hai loại Native C++ Data Types và SystemC Data Types
# 1. Native C++ Data Types
Định nghĩa: SystemC được xây dựng trên nền tảng C++. Nên SystemC có thể sử dụng C++ native data types. Tham khảo:
+ Logic data types: bool
+ Signed và unsigned data types: int, long int … tham khảo hình.
| Tên | Mô tả | Kích thước (byte) |
|---|---|---|
| char | character | 1 |
| short int, short | short interger | 2 |
| int | interger | 4 |
| long int, long | long integer | 4 |
| long long int | long long integer | 8 |
| float | floating point | 4 |
| double | double precision floating point | 8 |
Kích thức của kiểu dữ liệu có thể khác nhau tùy vào trình biên dịch.
Ngoài ra thư việc template (Standard Template Library (STL)) của C++ hổ trợ rất nhiều kiểu dữ liệu. Như string giúp thao tác với chuỗi ký tự. Nối chuỗi bằng các operator +=,+ và assign() hoặc so sánh chuổi với ==, !=, < , <=, >, >= và compare(). Tham khảo : https://cplusplus.com/reference/ (opens new window)
# 2. SystemC Data Types Overview
Định nghĩa: Thư viện SytemC cung cấp date types để mô hình hóa các hệ thống số và fixed-point arithmetic.
SystemC logic vector types: 2-valued-used (0,1) và 4-valued-used (0,1,x,z) logic
sc_bv<W> : SystemC bit vector data type có khả năng xữ lý bit tương tự như sc_lv<w>. Hoạt động tại hai mức trạng thái logic 0 và 1. Khai báo: sc_bv<BITWIDTH> name;
Ví dụ:
`sc_bv<6> value = “011110”` `sc_bv<6> mark = “011001”` `sc_bv<6> result = value & mark ` `sc_bv<1> and_result = result.and_reduce();`sc_logic và sc_lv<W>: SystemC logic vector data type có tính năng tưng tự như sc_bv<w>. hỗ trợ 4 trạng thái trong digital design: logic 0: SC_LOGIC_0, Log_0, ‘0’ logic 1: SC_LOGIC_1, Log_1, ‘1’ high-impedance: SC_LOGIC_Z, Log_Z, ‘Z’, ‘z’ unknown: SC_LOGIC_X, Log_X, ‘X’, ‘x’ Khai báo: sc_lv<BITWIDTH> name; sc_logic name;
Ví dụ:
sc_lv<6> value = “01xz10”sc_lv<6> mark = “0zx001”sc_lv<6> result = value & marksc_lv<1> and_result = result.and_reduce();
SystemC numeric types: integer và fixed-point, class template data type được SystemC tạo ra. Hổ trợ việc tạo các số có độ rộng từ 1 bit đến hàng trăm bitwidth với các tính năng chọn bit, và các operator.
sc_int<W> và sc_uint<W>: Hiệu quả khi mô hình hóa dữ liệu có động rộng bit từ 1 đến 64 signed và unsigned. Khai báo: sc_int<LENGTH> name; sc_uint<LENGTH> name; Ví dụ:
sc_int<5> position=3; // 5 bitssc_uint<13> speed(4000); // 13 bitsc_bigint<W> và sc_biguint<W>: Hỗ trợ mô hình hóa kiểu dữ liệu lớn hơn 64 bit signed và unsigned. Đánh đổi lại về tốc độ mô phỏng.
Khai báo:
sc_bigint<BITWIDTH> name;
sc_biguint<BITWIDTH> name;
Ví dụ:
sc_biguint<100> number; // 100 bits
SystemC Fixed-Point Types: Hỗ trợ mô hình hóa hệ thống DSP có nhu cầu sử dụng kiểu dữ liệu không phải dạng số nguyên. Có thể cấu hình tại thời điểm compile time và run_time.
Khai báo:
sc_fixed\<WL,IWL[,QUANT[,OVFLW[,NBITS]\> name;
sc_ufixed\<WL,IWL[,QUANT[,OVFLW[,NBITS]\> name;
sc_fixed_fast\<WL,IWL[,QUANT[,OVFLW[,NBITS]\> name;
sc_ufixed_fast\<WL,IWL[,QUANT[,OVFLW[,NBITS]\> name;
sc_fix name (WL,IWL[,QUANT[,OVFLW[,NBITS]);
sc_ufix name (WL,IWL[,QUANT[,OVFLW[,NBITS]);
sc_fix_fast name (WL,IWL[,QUANT[,OVFLW[,NBITS]);
sc_ufix_fast name (WL,IWL[,QUANT[,OVFLW[,NBITS]);
Ví dụ:
sc_fixed<8,3> value // 8-bit fixed-point