Professional Documents
Culture Documents
Mid Term
Mid Term
ĐỀ TÀI:
BÀI TẬP GIỮA KÌ
- Thông qua đề bài, ta nhận định được sẽ dùng 2 chương trình cơ bản của 2 bộ logic là
bộ cộng (add) và bộ nhân (multiplier).
- Đối với bài 1, ta sẽ dùng phương pháp tính toán tuần tự các bước.
- Đối với bài 2, ta sẽ dùng phương pháp …
2. Bài 1
2.1. Phân tích yêu cầu
- Đối với bài 1, ta xác định có 2 phép tính cần phải thực hiện là phép nhân bao gồm 2
phần:
Các biến ‘’a’’ nhân ‘’x’’
Các biến ‘’x’’ nhân nhau
- Với các phép biến đổi tuần tự ta lập bảng xử lí tuần tự như sau:
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_arith.all;
USE IEEE.std_logic_signed.all;
LIBRARY lpm;
USE lpm.LPM_COMPONENTS.ALL;
ENTITY step IS
port(
CLK, CLK_40n: IN STD_LOGIC;
x: IN STD_LOGIC_VECTOR (7 downto 0);
y: OUT STD_LOGIC_VECTOR (31 downto 0));
end step;
BEGIN
mull: lpm_mult
generic map(LPM_WIDTHA => 16, LPM_WIDTHB => 16, LPM_WIDTHS =>
16, LPM_WIDTHP => 32, LPM_REPRESENTATION => "signed", LPM_PIPELINE
=> 1)
port map(dataa => mula, datab => mulb, clock => clk, result => mulr);
adder1: lpm_add_sub
generic map(lpm_width => 32, LPM_REPRESENTATION => "signed",
lpm_pipeline => 1)
port map(dataa => adda, datab => addb, clock => clk, result => addr);
GEN:block
BEGIN
PROCESS(CLK_40n)
BEGIN
IF CLK_40n'EVENT and CLK_40n = '1' THEN
CNT <= CNT + 1;
IF CNT = X"00" THEN
mula <= A5;
mulb <= x;
ELSIF CNT = X"01" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"02" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"03" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"04" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"05" THEN
adda <= mulr;
mula <= A4;
mulb <= x;
ELSIF CNT = X"06" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"07" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"08" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"09" THEN
addb <= mulr;
mula <= A3;
mulb <= x;
ELSIF CNT = X"0A" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"0B" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"0C" THEN
adda <= addr;
addb <= mulr;
mula <= A2;
mulb <= x;
ELSIF CNT = X"0D" THEN
mula <= mulr;
mulb <= x;
ELSIF CNT = X"0E" THEN
adda <= addr;
addb <= mulr;
mula <= A1;
mulb <= x;
ELSIF CNT = X"0F" THEN
adda <= addr;
addb <= mulr;
ELSIF CNT = X"10" THEN
adda <= addr;
addb <= A0;
ELSIF CNT = X"11" THEN
y <= addr;
CNT <= X"00";
END IF;
END IF;
END PROCESS;
END block GEN;
END step_arch;
2.3. Giải mã code
- Khai báo thư viện:
+ Với các biến x,y, A0-5 là 32 bit để thực hiện các phép nhân ko bị tràn dữ liệu khi
hiển thị
+ Các cổng nhân đầu vào mula, mulb đặt giá trị 32 bit, và đầu ra mulr 64 bit
+ Các cổng cộng đầu vào và ra khai báo 32 bit.
- Gán các giá trị xung:
+ Ở các phép toán sau, tương tự như vậy nhân giá trị x vào A5 để có A5x5
+ Ở phép toán thứ 5, ta thực hiện 2 phép toán: Phép nhân A4 với x và phép toán
cộng với A5x5
- Các phép toán còn lại làm tương tự để đạt được giá trị cuối.
- Gán các giá trị sau tính toán vào T để tiếp tục tính toán
- Ở phép toán 1,2,3: ta nhân hàng 1 với cột 1
- Ở phép toán 4, 5: ta cộng các giá trị vừa nhân với nhau và gán nó với giá trị vị trí 1 của
ma trận kết quả:
- Tương tự như vậy với hàng 1 cột 2 cho vị trí 2, hàng 1 cột 3 cho vị trí 3, …. Hàng 3 cột
3 cho vị trí 9.
3.4. Kết quả mô phỏng
- Ta có ma trận A là
Suy ra: