Digital Design
Digital Design
1) Đầu vào
- ý nghĩa thông tin:. Ví dụ biểu diễn mã hóa tiếng nói hoặc 1 bit trong frame UART.
2) Đầu ra
Ví dụ:
x y
1 10
2 15
..v..v ..v.v.
+ hệ thống tổng thể chứa module cần thiết kế. < cơ sở cấu trúc>
* Sơ đồ cấu trúc:
module comb(
input [7:0] x, // x: số nguyên cí dấu biểu diễn tiếng nói ở tần số 8MHz
1) Truth table
3) Mô tả dữ liệu
Truth table
s x1 x2 y
0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1
- phép gán trong khối lệnh thủ tục : là blocking asignment. - < y1 = x1
Ví dụ:
Nếu không có else / default thì y luôn nhận giá trị ngay trước nó
=> SPEC
Input: 16bit tương ứng với 4 cụm 4 bit, mỗi cụm 2bit -> mã hóa 0-15
Output: số 28bit
-> mỗi cụm 7bit điều khiển 1 led của led 7 thanh.
-> module top gồm 4 module giải mã 7 thanh với kết nối
1. tạo input
1.Tạo trực tiếp :gán giá trị cụ thể tại time cụ thể như ví dụ trên -> nhanh chỉ sử dụng vài điểm.
1. tạo ra 1 mô hình hóa để tính output từ input dựa trên SPEC < golden output
Chú ý: không bao giờ gán reg ở 2 khối lệnh < do không kiểm soát được giá trị thực >
1.ALU. https://www.fpga4student.com/2017/06/Verilog-code-for-ALU.html
ALU self chính là opcode để xác định loại phép toán nào trong ALU.
Input: gồm 2 input đầu vào 8 bit <x,y> , 1 cờ nhớ ngõ vào c_in 1 bit
Output: 1 ouput đầu ra là tổng s, 1 output là cờ nhớ ngõ ra c_out 1 bit
Mối quan hệ
Truth Table
x y C_in C_out s
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
si = xi xor yi xor c[i-1] < i € [1:7] > <c là cờ nhớ ngõ ra tạm
thời 7bit sau mỗi lần đưa vào bộ FULL adder
ci = c[i-1] and (xi xor yi) or (xi and yi) < i € [1:6]
+ Sử dụng 8 bộ full adder để có được đầu ra là c_out 1bit và sau mỗi bộ full adder sẽ đưa ra 1 cờ nhớ
ngõ ra tạm gọi là c để sử dụng cho bộ adder phía sau và đưa ra lần lượt các bit của output tổng s là 8bit.
Tổng quan kiến thức
*Thiết kế bộ cộng
Chú ý: trong code verilog luôn phải có else khi dùng if nếu không nó khi sai sẽ trả về left.
Haft Adder
Full Adder:
* Tổng hợp mạch số
c) Khi các nhánh if thiếu else nhưng đầu ra có giá trị mặc định
3)
Nhánh case phía trên sẽ có mức độ ưu tiên cao hơn => Tương ứng với
điều kiện ở MUX ở gần đầu ra hơn.
Ví dụ:
5) Bộ đếm
* Thiết kế module hóa
Ví dụ : Thiết kế bộ cộng n bit
1. SPEC
input: a, b [n-1:0]
output: s : n+1 bit
2. Kiến trúc
a) carry ripple adder – CRA
* Bộ chia 2
Xác định số flip flop: 2^n >= divide by number => n = 1.
Tại sườn dương của tần số đầu vào tần số đầu ra thay đổi trạng thái:
* Bộ chia 5
Let the first flop be S0, second be S1 and third be S2. The output of the flops can be presented as S0 ′ ,
S1′ and S2′,
*Bộ chia 10= ghép nối tiếp 2 bộ chia 2 và chia 5
Module đếm giây
Đầu ra
inc_min 1 Tín hiệu thông báo tăng giá trị biến đếm phút
out_sec 6 Giá trị biến đếm giây
Mô tả chức năng
Ban đầu giá trị output_sec được gán = 0. Sau mỗi sườn dương của tín hiệu clk_out, nếu giá trị
output_sec < rst_numb_sec và rst_n = 1 thì sau đố output_sec tăng thêm 1 và inc_min = 0. Nếu giá trị
output_sec = rst_numb_sec sau đó giá trị output_sec = 0 và inc_mini
Khi tín hiệu rst_n = 0 được kích hoạt giá trị ban đầu inc_min và output_sec được đưa về 0
Module đếm phút
Mô tả chức năng
Gán giá trị ban đầu của đầu ra output_min = 0 và tăng inc_hr = 0.
Nếu giá trị inc_min có giá trị băng 0 giá trị out_min không thay đổi và inc_hr bằng 0
- Nếu out_min < rst_numb_min và rst_n = 1 giá trị đầu ra output_min tăng thêm 1 và inc_hr
- Nếu out_min = rst_numb_min giá trị đầu ra out_min trở về giá trị 0 và inc_hr bằng 1
Mô tả chức năng
Nếu giá trị inc_hr =0 giá trị đầu ra out_hr không thay dổi và inc_day có gía trị bằng 0
- Nếu out_hr < rst_numb_hr và rst_n = 1 giá trị đầu ra out_hr tăng thêm 1 và inc_hr bằng 0
- Nếu out_hr = rst_numb_hr giá trị đầu ra out_hr trở về giá trị 0 và inc_day =1.
Khi có tín hiệu rst_n giá trị đầu ra out_hr và inc_day được đua về giá trị 0
Module đếm ngày
Gán giá trị ban đầu của đầu ra out_day =1 và inc_mon bằng 1
Nếu giá trị inc_day = 0 giá trị out_day không thay đổi và inc_mon có giá trị bằng 0
-Nếu out_day < rst_num_day và rst_n =1 giá trị đầu ra out_day tăng thêm 1 và inc_mon bằng 0
- Nếu out_day = rst_numb_day giá trị đầu ra out_day trở về giá trị 1 và inc_mon
Khi có tín hiệu rst_n giá trị đầu ra out_day bằng 1 và inc_mon bằng 0
Nếu giá trị inc_year băng 0 giá trị đầu ra out_year không thay đổi
Nếu inc_year có giá trị bằng 1 giá trị đầu ra out_year băng 1
Nếu giá trị của month và year không thay đổi rst_numb_day không thay đổi
Nếu giá trị month = {1,3,5,7,8,10,12} thì giá trị đầu ra rst_numb_day bằng 31
Nếu giá trị month = {4,6,9,11} thì giá trị đầu ra rst_numb_day băng 30
Nếu giá trị month = 2 kiểm tra nếu giá trị năm year là năm nhuận thì giá trị đầu ra rst_numb_day = 29
nếu không rst_numb_day bằng 28
Out put : o_uint <led 7 thanh hàng đơn vị> , o_ten <led7 thanh hàng chục>
Gán o_uint là phần dư của phép chia numb cho 10 => o_uint = numb % 10.
Gán o_ten là phần nguyên của phép chia numb cho 10ten = numb / 10.
*Module hiển thị led 7 thanh cho số ở hàng đơn vị và hàng chục.
swap = 0 => chuyển từ hiển thị giờ phút giây sang ngày tháng năm
swap = 1 => chuyển từ hiển thị ngày tháng năm -> giờ phút giây.
-> y = lamda(x, s)
-> s’ = delta(x, s)
Thiết kế:
a) tạo ra state mới nếu cần (khi có state vật lý/ thông tin)
3. Lặp lại cho đến khi không có state mới được tạo ra.
Ví dụ: phát hiện chuối bit 110 trong dòng bit đưa vào
SPEC:
x đầu vào 1b
Rst
clk đồng hồ
Mô hình Merly đầu ra phụ thuộc vào trạng thái hiện tại và các dữ liệu ngõ vào
Moore đầu ra chỉ phụ thuộc vào trạng thái hiện tại.
Mô tả yêu cầu
Điều khiển cặp đèn giao thông theo hướng highway vs. country_road
Hướng highway sẽ luôn xanh Khi có xe chờ ở country_road thì highway sẽ sang vàng trong t (s), sau đó
sang đỏ và country_road sẽ sang xanh trong T (s)
Sau thời gian xanh, country road sẽ sang vàng trong t(s).
Đầu ra: led_highway, led_country: 3 bit mã hóa onehot tương ứng với 3 đèn xanh,đỏ,vàng
Nhiệm vụ:
1)Code Verilog cho bộ điều khiển đèn giao thông (country, highway, t, T)
2)Xác định Hệ thống tổng thể chứa module cần thiết kế (sơđồ cấu trúc)
3)Xác định pin assignment của hệ thống tổng thể trên kit
Sơ đồ khối
Highway road
Sơ đồ FSM
Input - output mối quan hệ
input – output
+opcode = 010, khi có t_timeout -> start_T = 1, start_t = 0, enable_C = 1, next_state = 001.
- Có tín hiệu rst_n => reset opcode_H = 100, car = 0, start_t = 0, start_T = 1, enable_H = 1.
CountryRoad
Sơ đồ FSM
input số bit
clk_1Hz 1 Tín hiệu xung đồng hồ 1Hz
rst_n 1 Tín hiệu reset tích cực mức thấp
T_timeout 1 tín hiệu đếm hết T s
enable_C 1 tín hiệu chuyển từ vàng sang đỏ của Highway đồng thời cũng là tín hiệu
chuyển từ Highwayroad sang Countryroad
t_timeout 1 tín hiệu hết đèn vàng
Output
opcode_C 3 các trạng thái đèn <xanh, vàng , đỏ>
enable_H 1 tín hiệu chuyển từ đỏ sang xanh của Highway đồng thời cũng là tín hiệu
chuyển từ CountryRoad sang HighwayRoad
start_T 1 tín hiệu bắt đầu đếm T_timeout
start_t 1 tín hiệu bắt đầu đếm t_timeout
Mối quan hệ
opcode = 100, khi có T_timeout -> start_T = 0, start_t =1, next_state = 010.
opcode = 010, khi có t_timeout -> start_T = 1, start_t = 0, enable_H = 1, next_state = 100.
+Có tín hiệu rst_n => reset opcode_H = 001, start_t = 0, start_T = 1.
T timeout
input ouput mối quan hệ:
input số bit
clk_1Hz 1 tín hiệu xung đồng hồ 1Hz
rst_n tín 1 tín hiệu reset tích cực mức thấp
start_T 1 tín hiệu bắt đầu đếm T_timeout
ouput
T_timeout 1 tín hiệu đếm hết T s
cnt_T 6 số giây
Mối quan hệ
t timeout
input output mối quan hệ
input số bit
clk_1Hz 1 tín hiễu xung đồng hồ 1Hz
rst_n 1 tín hiệu reset tích cực mức thấp
start_t 1 tín hiệu bắt đầu đếm t_timeout
output
t_timeout 1 tín hiệu đếm hết t s
cnt_t 6 số giây
-có tín hiệu rst_n => t_timeout = 0, cnt_t = t(s) <t là parameter>
B1) SPEC
mô tả bằng timing diagram:
Clk
Sn
Sbn
Start
Finish
Prod
B2) lưu đồ thuật toán -> triển khai:
Datapath:
https://husteduvn-my.sharepoint.com/personal/cong_tv192729_sis_hust_edu_vn/_layouts/15/
onedrive.aspx?id=%2Fpersonal%2Fcong%5Ftv192729%5Fsis%5Fhust%5Fedu%5Fvn%2FDocuments
%2FDigital%20Design&ga=1
https://husteduvn-my.sharepoint.com/personal/cong_tv192729_sis_hust_edu_vn/_layouts/15/
onedrive.aspx?id=%2Fpersonal%2Fcong%5Ftv192729%5Fsis%5Fhust%5Fedu%5Fvn%2FDocuments
%2Fbtvn&ga=1
SPEC LAB3.
https://distinct-yumberry-907.notion.site/Lab3-ng-h-th-k-d47f26e5c98144679f8b9ee9efc5aea1
https://verilogpractice.wordpress.com/2018/01/29/divide-by-5/?fbclid=IwAR34bWdkGhv5-
lQwwN5L1Ye5vi_YAyX9nsRgVI6BBEhM3PnFZTY9iGRUpbs
https://www.intel.com/content/www/us/en/docs/programmable/683472/23-1/and-software-
license.html?fbclid=IwAR17-_qfEGrdxGbMuHM2LcMcoJIQT39CAxta5hKsEv4-rLV_EooJQF14des
export LM_LICENSE_FILE=/home/edabk/Desktop/LR-119701_License.dat:$LM_LICENSE_FILE
LAB4 .
SPEC LAB 4.
https://classy-hip-e22.notion.site/SPEC-LAB4-FSM-9d43f4ad41ee4ee0be974a4539b93a60
https://www.notion.so/SPEC-LAB4-FSM-9d43f4ad41ee4ee0be974a4539b93a60