8086+FPGA

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: 8086+FPGA

Post by Vic3Dexe »

Желтое на черном, потому что белый фон слепит глаза со страшной силой.
ГОСТ идет лесом, элементы примерно похожи на себя - и ладно. Микросхемы вообще - когда ЕСКД этот делали (84 года что ли...), FPGA и вообще настолько многоногих чипов еще в проекте не было.
Готовые библиотеки тоже обычно не использую.

зы Инверсные выходы у Вас не по ГОСТу :mrgreen:
User avatar
fifan
Devil
Posts: 912
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: 8086+FPGA

Post by fifan »

Правда ваша по инверсии. ГОСТ предусматривал рисование микросхем (любых, в том числе и аналоговых) в виде прямоугольника - тут всё верно.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 8086+FPGA

Post by Lavr »

fifan wrote:Никогда не использовал готовых библиотек, символы рисую по ГОСТу.
Если бы ты их ещё в масштабе рисовал хотя б в половину меньшем - цены бы твоим схемам не было... :lol:
А так - больно огромные они у тебя выходят... :-?
iLavr
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: 8086+FPGA

Post by Vic3Dexe »

fifan wrote:Правда ваша по инверсии.
Я про то, что кружочки, обозначающие инверсию выхода должны быть на пересечении прямоугольника корпуса и ноги, а не снаружи.
User avatar
fifan
Devil
Posts: 912
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: 8086+FPGA

Post by fifan »

Да точки инверсии должны быть внутри, я не знаю возможно ли их так сделать.

Сейчас специально зашёл в библиотеку и посмотрел расстояния между вертикальными выводами название пина/тело микросхемы/название пина должно быть 5/10...12/5 мм. У меня опять ниже - 2,5 мм.
Я тоже делал когда-то элементы по видеоучителю по точным координатам крайних точек прямоугольников.
Длина пинов не регламентируется, у меня - 5 мм. http://portal.tpu.ru:7777/SHARED/g/GREB ... age2_1.jpg

Как-то мы ушли от темы. Давайте перейдём к девайсу. Вопрос к автору. Размеры платы - 39.37 на 39.37 мм.? Или я напутал?
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: 8086+FPGA

Post by Vic3Dexe »

100x100 мм, максимум, что предлагают те китайцы, у которых я заказывал.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 8086+FPGA

Post by Lavr »

Vic3Dexe wrote:Я про то, что кружочки, обозначающие инверсию выхода должны быть на пересечении прямоугольника корпуса и ноги, а не снаружи.
Если я не ошибаюсь, по новому ГОСТу можно и снаружи, как вариант.
Раньше ведь и диод не прочеркивали насквозь - а сейчас это по ГОСТу...
Всё - для удобства творцов схем! :mrgreen:
iLavr
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: 8086+FPGA

Post by newold86 »

Vic3Dexe wrote:Биос, как я и планировал, располагается во флешке с прошивкой для самого циклона.
Можно, еще с глупыми вопросами попристаю ? :)
А как это реализуется - параллельная память в последовательной ?
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: 8086+FPGA

Post by Vic3Dexe »

Так он же там просто лежит, а не работает оттуда. При старте машины биос копируется в RAM, при работе запись туда, понятное дело, отключена.
Все это ради того, чтобы не лепить отдельную ROM и не морочить голову с ее прошивкой.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: 8086+FPGA

Post by newold86 »

А, я то думал, что есть какая-нибудь мегафункция или что-то подобное, чтобы прямо из EPCS делать параллельную память...

Копируется, очевидно, во внешнюю RAM ?
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: 8086+FPGA

Post by Vic3Dexe »

newold86 wrote:А, я то думал, что есть какая-нибудь мегафункция или что-то подобное, чтобы прямо из EPCS делать параллельную память...
Да написать-то можно, только скорость будет не тогойт... И, главное, нафик оно надо-то? :)
newold86 wrote:Копируется, очевидно, во внешнюю RAM ?
Именно. Сначала переливал в циклон, потом уже (в последующих версиях) прямо в SRAM.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: 8086+FPGA

Post by newold86 »

Vic3Dexe wrote:Сначала переливал в циклон, потом уже (в последующих версиях) прямо в SRAM.
Не просветите неуча, как именно копируется BIOS из флэша в Cyclone ?
IgorR76
Senior
Posts: 102
Joined: 27 Jul 2015 15:20

Re: 8086+FPGA

Post by IgorR76 »

newold86 wrote: как именно копируется BIOS из флэша в Cyclone ?
Я перепробовал много вариантов, мне показался самым простым такой:

Code: Select all

4-х разрядное пзу на verilog

//(* romstyle = "logic" *)      - это необязательно, можно указать, где создавать ROM
reg [3:0] rom[255:0];
initial 	$readmemh("rom.txt", rom);

А в текстовом файле - листинг пзу, побайтно через пробел, без адресов.

Code: Select all

....
7 7 7 F 7 F F 7 F F F 7 F 7 F 7
7 F 7 F 7 F F 7 F B B 7 F 7 F 7
7 F F F 7 F F 7 F B B 7 F 7 F 7
F 7 F F 7 F 7 7 F 7 3 3 F 7 F 7
....
Источник : Quartus Prime Handbook, страница 16-8 (970 в pdf).

Т.е. стандартными средствами Quartus+Altera при инициализации FPGA само всё скопируется.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: 8086+FPGA

Post by Vic3Dexe »

IgorR76 wrote:Т.е. стандартными средствами Quartus+Altera при инициализации FPGA само всё скопируется.
Если ROM изначально в циклоне и там и останется - то это само собой.

Задача стояла совершенно иная - использовать флешку именно как внешнюю память, т.е. скопировать оттуда свои произвольные данные во внешнюю параллельную RAM. Например, если биос тупо не влазит в набортную память циклона.

Есть готовая мегафункция - asmi_parallel, которую и используем.
Примерно так:

Code: Select all

module bios_asmi(
  input wire ASMI_CLK,
  output wire BIOS_DONE,
  //интерфейс к RAM
  output reg [19:0] RAM_A,
  output reg [15:0] RAM_D,
  output reg nWR);

wire [7:0] ASMI_DATA;
wire ASMI_BUSY, ASMI_DVALID;

//подождем, иначе флешка молчит, сука
reg [5:0] DELAY;
always @(posedge ASMI_CLK) DELAY <= &DELAY ? DELAY : DELAY + 6'h1;

//счетчик
reg [16:0] CNTR = 17'h0;
always @(posedge ASMI_CLK) CNTR <= ASMI_DVALID & ~BIOS_OK ? CNTR+17'h1 : CNTR;
wire PRELAST_BYTE = ~CNTR[16] & (&CNTR[15:0]); //FFFF
wire LAST_BYTE = CNTR[16];

//выдаем RDEN по отсутствию BUSY и счетчику меньше положенного
//RDEN висит все время чтения
reg RDEN = 1'b0;
always @(negedge ASMI_CLK) RDEN <= (PRELAST_BYTE | LAST_BYTE) ? 1'b0 : (~ASMI_BUSY & (&DELAY)) | RDEN;

//выдаем READ_CMD по фронту RDEN
reg RDEN_FRONT;
always @(negedge ASMI_CLK) RDEN_FRONT <= RDEN;
wire READ_CMD = RDEN & ~RDEN_FRONT;

//выдаем наружу признак окончания
reg BIOS_OK = 1'b0;
always @(posedge ASMI_CLK) BIOS_OK <= LAST_BYTE;
assign BIOS_DONE = BIOS_OK; //чтобы можно было ему 0 присвоить на старте

//снимаем данные
always @(posedge ASMI_CLK) begin
  RAM_D[15:8] <= ASMI_DVALID & CNTR[0] ? ASMI_DATA : RAM_D[15:8];
  RAM_D[7:0] <= ASMI_DVALID & ~CNTR[0] ? ASMI_DATA : RAM_D[7:0];
end

//адрес фиксируем при чтении 2 байта
always @(posedge ASMI_CLK) RAM_A <= ASMI_DVALID & CNTR[0] ? {1'b0,4'hF,CNTR[15:1]} : RAM_A;

//сигнал записи
always @(posedge ASMI_CLK) nWR <= ~(ASMI_DVALID & CNTR[0]);

//инстанс
parameter bios_read_addr = 24'h70000;
asmi_bios asmi(.clkin(ASMI_CLK), .read(READ_CMD), .rden(RDEN), .addr(bios_read_addr), .reset(1'b0), .dataout(ASMI_DATA), .busy(ASMI_BUSY), .data_valid(ASMI_DVALID));

endmodule
IgorR76
Senior
Posts: 102
Joined: 27 Jul 2015 15:20

Re: 8086+FPGA

Post by IgorR76 »

А изначально код биоса находится в той же флешке, откуда инициализируется fpga? "Приаттачивается" вручную или есть способ через Квартус?

PS. Почитал описание мегафункции asmi. Надо отдельный модуль для записи в EPCS. Вроде понятно.

Но newold86 спрашивал про "копирование в циклон". Тогда подходит и мой способ.
Last edited by IgorR76 on 20 May 2017 00:30, edited 1 time in total.