Ассоциативные запоминающие устройства, моделирование ассоциативной ячейки


Задание:
1. При помощи любого известного Вам средства моделирования создать модель ячейки АЗУ.

2. Продемонстрировать работоспособность модели.

3. Провести моделирование спроектированной ячейки АЗУ.

4. Результаты моделирования оформить в виде отчета.

5. Создать модель накопителя АЗУ размером 2n+1 x 2N-n+1 ячеек, где N=24, n=1.

6. Провести моделирование накопителя(заполнение накопителя случайными и заданными данными, а также данными из файла).

Теоретический материал

1. Модель Ячейки АЗУ


Модель Ячейки АЗУ

Входные сигналы:
Аi – выбор ячейки
Dj(0), Dj(1) – запись 0 или 1.
ACj(0), ACj(1) – ассоциативное сравнение с 0 и 1.
Выходные сигналы:
Pi – результат сравнения
Bj – состояние ячейки

Принцип работы:
Ячейка выбрана, если на вход Аi подана 1. Для записи информации в ячейку на входы Dj(1) и Dj(0) необходимо подать одну из комбинаций сигналов: «10» — запись единицы, «01» — запись нуля, «00» — маскирование записи.

Для сравнения бита поискового аргумента с содержимым ассоциативной ячейки на её входы ACj(1) и ACj(0) нужно подать сочетание сигналов: «10» — при сравнении с единицей, «01» — при сравнение с нулем, «00» — при маскировании сравнения. В случае совпадения на выходе Pi сохранится уровень логической «1», в противном случае на нем установится уровень логического «0». На Bj при Ai = 1 будет считывание хранимого бита в инверсном виде.

2. Ассоциативное ЗУ


Ассоциативное ЗУ

Принцип работы
Режим чтения
В регистре адреса выбираем одну строку, в регистре маски маскируем ячейки для чтения. После цикла чтения в выходном регистре будут находиться маскированные данные из накопителя.

Режим записи
В регистре адреса выбираем одну или несколько строк, в регистре маски маскируем биты для записи. После цикла записи в выбранные ячейки накопителя запишутся данные из регистра аргументного поиска.
Моделирование ячейки АЗУ и ассоциативного накопителя было выполнено при помощи языка программирования Delphi 7. Размер программы не очень большой, но при большом размере ассоциативного накопителя время выполнения программы существенно возрастает.

Рассмотрим работу программы
Модель спроектированной ячейки АЗУ выглядит так:




Запишем нуль в ассоциативную ячейку: Аi =1, Dj(1)=0, Dj(0)=1.
В результате получим



Теперь сравним записанный нуль с единицей. Подадим на ACi(1)=1, ACi(0)=0.


Моделирование накопителя:

Заполним накопитель случайными числами:




Запишем в 2ую строку в столбцы 2, 3, 6, 9 единицы, а так же запишем в 4ую строку в столбцы 1, 3, 4, 5, 6, 9 нули.


Код программы

unit Unit1;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
ComboBox5: TComboBox;
ComboBox2: TComboBox;
ComboBox1: TComboBox;
ComboBox4: TComboBox;
ComboBox3: TComboBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
GroupBox2: TGroupBox;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
Button2: TButton;
Button1: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
trigger:integer;
mas:array[1..5,1..16778]of byte;
implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
trigger:=-1;
for i:=1 to 5 do
for j:=1 to 16778 do
begin
StringGrid1.Cells[j-1,i-1]:=IntToStr(0);
mas[i,j]:=0;
end;
//———————————————
for j:=1 to 16778 do
StringGrid2.Cells[j-1,0]:=IntToStr(0);
//———————————————
for j:=1 to 16778 do
StringGrid3.Cells[j-1,0]:=IntToStr(0);
//———————————————
for j:=1 to 5 do
StringGrid4.Cells[0,j-1]:=IntToStr(0);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if (((ComboBox1.Text=’1′) and (ComboBox2.Text=’1′))or((ComboBox4.Text=’1′) and (ComboBox3.Text=’1′))) then
begin
showmessage(‘ZanpeLL|eHHoe cocTo9Hue’);
end
else
if (CheckBox1.Checked=true) then

begin

if (ComboBox5.Text=’0′)and(ComboBox2.Text=’0′)and(ComboBox1.Text=’0′) then ShowMessage(‘Ha Bxog TpurrepoB nogaHo gBe 1; ZanpeLL|eHHoe cocTo9Hue’);
if (ComboBox5.Text=’0′)and(ComboBox2.Text=’0′)and(ComboBox1.Text=’1′) then ShowMessage(‘Ha Bxog TpurrepoB nogaHo gBe 1; ZanpeLL|eHHoe cocTo9Hue’);
if (ComboBox5.Text=’0′)and(ComboBox2.Text=’1′)and(ComboBox1.Text=’0′) then ShowMessage(‘Ha Bxog TpurrepoB nogaHo gBe 1; ZanpeLL|eHHoe cocTo9Hue’);

if (ComboBox5.Text=’1′)and(ComboBox2.Text=’0′)and(ComboBox1.Text=’0′) then ShowMessage(‘Ha Bxog TpurrepoB nogaHo gBe 1; ZanpeLL|eHHoe cocTo9Hue’);
if (ComboBox5.Text=’1′)and(ComboBox2.Text=’0′)and(ComboBox1.Text=’1′) then begin trigger:=0; ShowMessage(‘trigger ycTaHoBuTc9 B HyJIb’);end;
if (ComboBox5.Text=’1′)and(ComboBox2.Text=’1′)and(ComboBox1.Text=’0′) then begin trigger:=1; ShowMessage(‘trigger ycTaHoBuTc9 B eguHuL|y’);end;

end;
if (trigger=-1) and (CheckBox2.Checked=true) then ShowMessage(‘Heo6xoguMo ycTaHoBuTb 3Ha4eHue HA Tpurrepe’);

if (CheckBox2.Checked=true) then
begin
if (ComboBox4.Text=’0′)and(ComboBox3.Text=’0′)and (trigger=0) then ShowMessage(‘Pi=1′);
if (ComboBox4.Text=’0′)and(ComboBox3.Text=’1’)and (trigger=0) then ShowMessage(‘Pi=1′);
if (ComboBox4.Text=’1′)and(ComboBox3.Text=’0’)and (trigger=0) then ShowMessage(‘Pi=0′);

if (ComboBox4.Text=’0′)and(ComboBox3.Text=’0’)and (trigger=1) then ShowMessage(‘Pi=1′);
if (ComboBox4.Text=’0′)and(ComboBox3.Text=’1’)and (trigger=1) then ShowMessage(‘Pi=0′);
if (ComboBox4.Text=’1′)and(ComboBox3.Text=’0’)and (trigger=1) then ShowMessage(‘Pi=1′);
end;

if (CheckBox3.Checked=true) then
begin
if (ComboBox5.Text=’0’)and(trigger=0) then ShowMessage(‘not_Bi=1′);
if (ComboBox5.Text=’0’)and(trigger=1) then ShowMessage(‘not_Bi=1′);
if (ComboBox5.Text=’1’)and(trigger=0) then ShowMessage(‘not_Bi=1′);
if (ComboBox5.Text=’1’)and(trigger=1) then ShowMessage(‘not_Bi=0’);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer; F1:textfile; temp:byte; error:boolean;
begin
error:=false;
if(CheckBox4.Checked=true)and(CheckBox5.Checked=false)and(CheckBox6.Checked=false) then
for i:=1 to 5 do
for j:=1 to 16778 do
begin
mas[i,j]:=StrToInt(StringGrid1.Cells[j-1,i-1]);
end
else if (CheckBox4.Checked=true)and(CheckBox5.Checked=true)or
(CheckBox4.Checked=true)and(CheckBox6.Checked=true) then begin
ShowMessage(‘HeBepHo 3agaHo ycJIoBue’); error:=true; end;
if(CheckBox5.Checked=true)and(CheckBox4.Checked=false)and(CheckBox6.Checked=false)and(error=false)then
begin
assignFile(F1,’file.txt’);
Reset(F1);
for i:=1 to 5 do
for j:=1 to 16778 do
begin
Read(F1,temp);
StringGrid1.Cells[j-1,i-1]:=IntToStr(temp);
mas[i,j]:=temp;
end
end
else if(CheckBox5.Checked=true)and(CheckBox6.Checked=true)and(error=false)or
(CheckBox5.Checked=true)and(CheckBox4.Checked=true)and(error=false) then begin
ShowMessage(‘HeBepHo 3agaHo ycJIoBue’); error:=true; end;
if(CheckBox6.Checked=true)and(CheckBox4.Checked=false)and(CheckBox5.Checked=false)and(error=false)then
for i:=1 to 5 do
for j:=1 to 16778 do
begin
temp:=random(2);
StringGrid1.Cells[j-1,i-1]:=IntToStr(temp);
mas[i,j]:=temp;
end
else if (CheckBox6.Checked=true)and(CheckBox4.Checked=true)and(error=false)or
(CheckBox6.Checked=true)and(CheckBox5.Checked=true)and(error=false)then begin
ShowMessage(‘HeBepHo 3agaHo ycJIoBue’); error:=true; end;

for i:=1 to 5 do
for j:=1 to 16778 do
begin
if (StrToInt(StringGrid1.Cells[j-1,i-1])=1) then
begin
StringGrid3.Cells[j-1,0]:=IntToStr(1);
StringGrid4.Cells[0,i-1]:=IntToStr(1);
end;

if (StrToInt(StringGrid1.Cells[j-1,i-1])=0) then
begin
StringGrid2.Cells[j-1,0]:=IntToStr(1);
end;
StringGrid2.Cells[j-1,0]:=IntToStr(0);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var F1:textfile;
r:byte; i,j:integer;
begin
assignFile(F1,’file.txt’);
ReWrite(F1);
for i:=1 to 5 do
for j:=1 to 16778 do
begin
r:=random(2);
write(f1,r);
write(f1,’ ‘);
end;
closeFile(F1);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Button5Click(Sender: TObject);
var i,j:integer;
begin
for j:=1 to 16778 do
if (StrToInt(StringGrid3.Cells[j-1,0])=0) then
for i:=1 to 5 do
begin
if (StrToInt(StringGrid4.Cells[0,i-1])=1) then
begin
StringGrid1.Cells[j-1,i-1]:=IntToStr(0);
mas[i,j]:=0;
end;
end; // D1=0 D0=0
//———————————————
for j:=1 to 16778 do
if (StrToInt(StringGrid2.Cells[j-1,0])=1) then
for i:=1 to 5 do
begin
if (StrToInt(StringGrid4.Cells[0,i-1])=1) then
begin
StringGrid1.Cells[j-1,i-1]:=IntToStr(1);
mas[i,j]:=1;
end;
end; // M=1 => D1=1 D0=0
//———————————————
for i:=1 to 5 do
if (StrToInt(StringGrid4.Cells[0,i-1])=1) then
for j:=1 to 16778 do
begin
if (StrToInt(StringGrid3.Cells[j-1,0])=1) then
begin
StringGrid1.Cells[j-1,i-1]:=IntToStr(1);
mas[i,j]:=1;
end
else
begin
if not(StrToInt(StringGrid2.Cells[j-1,0])=1) then
StringGrid1.Cells[j-1,i-1]:=IntToStr(0);
mas[i,j]:=0;
end;
end; // Ai=1
//———————————————
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
Form2.Show;

end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Form3.Show;
end;

end.


Комментарии запрещены.




Статистика