2. Задание на курсовой проект
Вариант №31

|
|
Вход |
Вход |
Выход |
Выход |
|
С |
D |
R |
Q |
Qn |
|
/ |
H |
H |
H |
Qn-1 |
|
/ |
B |
H |
B |
Qn-1 |
|
X |
X |
B |
H |
H |
Примечание: Схема содержит два независимых четырехразрядных регистра сдвига. Каждый регистр имеет четыре выхода Qот каждого триггера. Все триггеры регистра двухступенчатые,D-типа. Данные в регистр вводятся через последовательный входD. Регистр имеет вход тактовых импульсовC, причем данные принимаются от входаDпервого триггера и сдвигаются на один такт вправо после каждого положительного тактового интервала на входеC. Сброс в нуль данных на выходеqрегистра получится, еслиyfвход асинхронного сбросаRподать напряжение высокого логического уровня. Состояния каждого регистра представлены в таблице. Четыре выхода регистра позволяют преобразовывать последовательный код, принимаемый по входуD, в параллельный, на выходахQ0..Q3, отображаемый через четыре такта.
3.Описание курсовой работы.
Библиотека элементов lib.vhd
entity dcrtt is
port(d,c,r: in bit; q,nq: out bit);
end dcrtt;
architecture trig of dcrtt is
signal stored,intsig: bit;
begin
process
begin
if r = '1' then
intsig <= '0'; stored <= '0';
elsif c = '0' and not c'stable then
intsig <= stored;
elsif c = '1' then
stored <= d;
end if;
if intsig'event then
q <= intsig;
nq <= not intsig;
end if;
end process;
end trig;
entity inv is
port(x:in bit;y:out bit);
end inv;
architecture inv_pov of inv is
begin
y<=not x;
end inv_pov;
Архитектура регистра registr.vhd
library lib;
use lib.all;
entity kurs is
port(r,d,c:in bit_vector(1 to 2);q1,q2:out bit_vector(1 to 4));
end kurs;
architecture kurs_log of kurs is
component dcrtt
port(d,c,r:in bit;q,qnot:out bit);
end component;
component inv
port(x:in bit;y:out bit);
end component;
for all: dcrtt use entity lib.dcrtt(trig);
for all: inv use entity lib.inv(inv_pov);
signal x2: bit_vector(1 to 6);
signal x1,xq1,xq2,xq3,xq4: bit_vector(1 to 4);
begin
d1: inv port map(d(1),x1(1));
d2: inv port map(r(1),x1(2));d3: inv port map(d(2),x1(3));
d4: inv port map(r(2),x1(4));d5: inv port map(x1(1),x2(1));
d6: inv port map(c(1),x2(2));d7: inv port map(x1(2),x2(3));
d8: inv port map(x1(3),x2(4));d9: inv port map(c(2),x2(5));
d10: inv port map(x1(4),x2(6));
d11: dcrtt port map(x2(1),x2(2),x2(3),xq1(1),xq1(2));
d12: dcrtt port map(x2(4),x2(5),x2(6),xq1(3),xq1(4));
d13: dcrtt port map(xq1(1),x2(2),x2(3),xq2(1),xq2(2));
d14: dcrtt port map(xq1(1),x2(2),x2(3),xq2(3),xq2(4));
d15: dcrtt port map(xq2(1),x2(2),x2(3),xq3(1),xq3(2));
d16: dcrtt port map(xq2(1),x2(2),x2(3),xq3(3),xq3(4));
d17: dcrtt port map(xq3(1),x2(2),x2(3),xq4(1),xq4(2));
d18: dcrtt port map(xq3(1),x2(2),x2(3),xq4(3),xq4(4));
d19: inv port map(xq1(2),q1(1));
d20: inv port map(xq2(2),q1(2));
d21: inv port map(xq3(2),q1(3));
d22: inv port map(xq4(2),q1(4));
d23: inv port map(xq1(4),q2(1));
d24: inv port map(xq2(4),q2(2));
d25: inv port map(xq3(4),q2(3));
d26: inv port map(xq4(4),q2(4));
end kurs_log;
architecture kurs_reg of kurs is
component dcrtt
port(d,c,r:in bit;q,qnot:out bit);
end component;
for all:dcrtt use entity lib.dcrtt(trig);
signal x2: bit_vector(1 to 6);
signal x1,xq1,xq2,xq3,xq4: bit_vector(1 to 4);
begin
d1: x1(1)<=not d(1);d2: x1(2)<=not r(1);
d3: x1(3)<=not d(2);d4: x1(4)<=not r(2);
d5: x2(1)<=not x1(1);d6: x2(2)<=not c(1);
d7: x2(3)<=not x1(2);d8: x2(4)<=not x1(3);
d9: x2(5)<=not c(2);d10: x2(6)<=not x1(4);
d11: dcrtt port map(x2(1),x2(2),x2(3),xq1(1),xq1(2));
d12: dcrtt port map(x2(4),x2(5),x2(6),xq1(3),xq1(4));
d13: dcrtt port map(xq1(1),x2(2),x2(3),xq2(1),xq2(2));
d14: dcrtt port map(xq1(1),x2(2),x2(3),xq2(3),xq2(4));
d15: dcrtt port map(xq2(1),x2(2),x2(3),xq3(1),xq3(2));
d16: dcrtt port map(xq2(1),x2(2),x2(3),xq3(3),xq3(4));
d17: dcrtt port map(xq3(1),x2(2),x2(3),xq4(1),xq4(2));
d18: dcrtt ort map(xq3(1),x2(2),x2(3),xq4(3),xq4(4));
d19: q1(1)<=not xq1(2);d20: q1(2)<=not xq2(2);
d21: q1(3)<=not xq3(2);d22: q1(4)<=not xq4(2);
d23: q2(1)<=not xq1(4);d24: q2(2)<=not xq2(4);
d25: q2(3)<=not xq3(4);d26: q2(4)<=not xq4(4);
end kurs_reg;
Процедурное моделирование: файл kurs.vhd
library registr;
use registr.all;
use STD.TEXTIO.all;
entity test_kurs is
end test_kurs;
architecture test of test_kurs is
signal ir,id,ic:bit_vector(1 to 2);
signal iq1,iq2:bit_vector(1 to 4);
component kur
port(r,d,c:in bit_vector(1 to 2);q1,q2:out bit_vector(1 to 4));
end component;
for all:kur use entity registr.kurs(kurs_reg);
begin
device : kur port map(ir,id,ic,iq1,iq2);
ic<=('1','1') after 0ns,('1','1') after 20ns,('0','0') after
30ns, (‘1’,’1’) after 40ns;
id(2)<='1' after 10ns,'0' after 40ns;
id(1)<='1' after 10ns,'0' after 20ns;
ir<=('1','1') after 0ns,('0','0') after 10ns,('1','1') after
40ns;
process
variable l:line;
begin
write(l,"--------------------------------------------------------
---------------------");
writeline(output,l);
write(l,"time d1,2 r1,2 c1,2 q11 q12 q13 q14 q21
q22 q23 q24 ");
writeline(output,l);
write(l,"--------------------------------------------------------
---------------------");
writeline(output,l);
wait for 1100ns;
end process;
process
variable t:time;
variable l:line;
begin
t:=now;
if t>1ns then
write(l,t);write(l," ");write(l,id(1));write(l,id(2));
write(l," ");
write(l,ir(1));write(l,ir(2));write(l," ”);write(l,ic(1));
write(l,ic(2));write(l," ");
write(l,iq1(1));write(l," ");write(l,iq1(2));write(l," ");
write(l,iq1(3));write(l," ");
write(l,iq1(4));write(l," ");write(l,iq2(1));write(l," ");
write(l,iq2(2));write(l," ");write(l,iq2(3));
write(l," ");write(l,iq2(4));writeline(output,l);
end if;
if t<200ns then wait for 10ns;else wait for 9ns; end if;
end process;
end test;
Содержание bat файла:
vhdl kurs.vhd
link kurs kurs test_kurs
sv 50ns kurs
ТАБЛИЦА ИСТИННОСТИ


Вход