вопросы по Verilog
вопросы по Verilog
Здравствуйте, решил перейти с AHDL на Verilog.Помогите пожалуйста переписать прошивку с AHDL на Verilog.
пока вот что получилось:
module epm3064(OUT,WR,RESET,RD,CS,DAT,A,D);
input wire [3:0] A;
input wire [7:0] D;
input wire WR, RD, CS, RESET;
inout [7:0] DAT;
inout [8:1] OUT;
output reg [8:1] OUT;
reg [8:1] INREG;
пока вот что получилось:
module epm3064(OUT,WR,RESET,RD,CS,DAT,A,D);
input wire [3:0] A;
input wire [7:0] D;
input wire WR, RD, CS, RESET;
inout [7:0] DAT;
inout [8:1] OUT;
output reg [8:1] OUT;
reg [8:1] INREG;
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: вопросы по Verilog
Тема называется "вопросы по Verilog", а вопросов и не видно. Только "помогите". Может, для начала как-то описательную часть топика сформулировать? Что за устройство, какое ТЗ, с кем общается. А то сходу - какой-то модуль.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: вопросы по Verilog
микросхема ALTERA EPM3064 на 44 пина.
ТЗ просто переписать с AHDL на VERILOG.
Общается, стоит на плате модуля дискретного ввода(8-ми канальный)плата индикиции и тд.
Я немного не понимаю.
Вот допустим тириггер описывается в прошивке, или выводы просто описываются на AHDL:
DAT0 = TRI(D0,!CS&!RD); % сигнал с выхода трехразрядного буфера TRI подается на I/O порт %
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
% соединение порта D защелок с DAT[]&RESET %
IN_REG[8..1].D = DAT[7..0]; % соединения выполняются одновременно %
IN_REG[].CLK = LCELL(!WR);
IN_REG[8..1].ENA = (!CS&(A[]==8));
IN_REG[].CLRN = LCELL(RESET);
как на верилог переписать это?
ТЗ просто переписать с AHDL на VERILOG.
Общается, стоит на плате модуля дискретного ввода(8-ми канальный)плата индикиции и тд.
Я немного не понимаю.
Вот допустим тириггер описывается в прошивке, или выводы просто описываются на AHDL:
DAT0 = TRI(D0,!CS&!RD); % сигнал с выхода трехразрядного буфера TRI подается на I/O порт %
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
% соединение порта D защелок с DAT[]&RESET %
IN_REG[8..1].D = DAT[7..0]; % соединения выполняются одновременно %
IN_REG[].CLK = LCELL(!WR);
IN_REG[8..1].ENA = (!CS&(A[]==8));
IN_REG[].CLRN = LCELL(RESET);
как на верилог переписать это?
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: вопросы по Verilog
А в скобках что описывается? Какие-то условия подачи сигнала? Сейчас о первой части.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: вопросы по Verilog
Да,условия подачи сигнала.
Выход DAT0, к нему подключаются сигналы D1 , и сумма инвертированных сигналов CS и RD).TRI дает нам Z состояние.
Выход DAT0, к нему подключаются сигналы D1 , и сумма инвертированных сигналов CS и RD).TRI дает нам Z состояние.
Re: вопросы по Verilog
никто не знает?
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
Тут хорошо идёт С-шная тернарная операция ?:Nevox писал(а): DAT0 = TRI(D0,!CS&!RD); % сигнал с выхода трехразрядного буфера TRI подается на I/O порт %
...
DAT7 = TRI(D7,!CS&!RD);
Код: Выделить всё
assign DAT = !CS && !RD ? D : 8bz; Тут posedge WR если запись в регистр по фронту WR. По фрагменту AHDL получается, что запись по спаду, так что negedge. Сброс низким уровнем на RESETNevox писал(а): % соединение порта D защелок с DAT[]&RESET %
IN_REG[8..1].D = DAT[7..0]; % соединения выполняются одновременно %
IN_REG[].CLK = LCELL(!WR);
IN_REG[8..1].ENA = (!CS&(A[]==8));
IN_REG[].CLRN = LCELL(RESET);
Код: Выделить всё
always @(negedge WR or negedge RESET)
begin
if (RESET == 0)
INREG <= 0;
else if (!CS && A == 8)
INREG <= DAT;
endЛень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: вопросы по Verilog
а как вот это расписать?
D[7..0] = (32&(A[3..0]==0))#
(28&(A[3..0]==1))#
(8&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN_REG[8..1]&(A[3..0]==8));
D[7..0] = (32&(A[3..0]==0))#
(28&(A[3..0]==1))#
(8&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN_REG[8..1]&(A[3..0]==8));
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
В первом сообщении D это input wire, тут уже другой D ?
Можно так же через И/ИЛИ, но это неинтересно. Можно так:
Можно так:
Однако вопрос -- что-то почитать по veilog пробовали?
Ладно, вчера (после 13-часовой отрисовки схем в воскресенье) сделал себе выходной, потоптался на форумах, а сегодня пора и за работу.
Можно так же через И/ИЛИ, но это неинтересно. Можно так:
Код: Выделить всё
wire [7:0] D;
assign D = A[3:0] == 0 ? 8'd32 :
A[3:0] == 1 ? 8'd28 :
A[3:0] == 2 ? 8'd8 :
A[3:0] == 3 ? 8'd8 :
A[3:0] == 4 ? 0 :
A[3:0] == 5 ? 0 :
A[3:0] == 6 ? 0 :
A[3:0] == 7 ? 0 :
A[3:0] == 8 ? IN_REG :
0; // но ведь в оставшихся случаях тоже 0, зачем в исходном для 4..7 отдельно было?
Можно так:
Код: Выделить всё
reg [7:0] D_reg;
assign D = D_reg; // ну или тут тоже через ?: третье состояние врезать или что другое
// Или сразу объявить D регистром, триггера тут не будет, если не забіть про
// default. Если забыть, получится LATCH
always @(*)
case (A[3:0])
0: D_reg = 8'd32;
1: D_reg = 8'd28;
2: D_reg = 8'd8;
3: D_reg = 8'd8;
8: D_reg = IN_REG;
default: D_reg = 0;
endcaseЛадно, вчера (после 13-часовой отрисовки схем в воскресенье) сделал себе выходной, потоптался на форумах, а сегодня пора и за работу.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: вопросы по Verilog
да,читаю кучу всего,в том числе и книги на английском.
Просто из-за изобилия информации все идет не сразу, поэтому и спрашиваю параллельно на форуме.
По конкретному примеру легче разобраться.
Просто из-за изобилия информации все идет не сразу, поэтому и спрашиваю параллельно на форуме.
По конкретному примеру легче разобраться.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
Погуглите слова evita verilog, у них были презенташки-слайды на десяток страниц по основным операциям, хороши для быстрого старта. Но потом всё равно что-то посерьёзнее найдите почитать.
Я, по обыкновению своему, после короткого вступления сразу в стандарт лезу, но оно суховато идёт с непривычки
О, ещё на сайте у Иосифа Каршенбойма цикл статей «Краткий курс HDL-кодирования» тоже, на мой взгляд, неплохо для начинающих.
Я, по обыкновению своему, после короткого вступления сразу в стандарт лезу, но оно суховато идёт с непривычки
О, ещё на сайте у Иосифа Каршенбойма цикл статей «Краткий курс HDL-кодирования» тоже, на мой взгляд, неплохо для начинающих.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: вопросы по Verilog
немного не по верилогу! Написал прошивку в итоге)
module test1(OUT,WR,RESET,RD,CS,DAT,A,D);
input wire [3:0] A;
input wire WR, RD, CS, RESET;
output wire [7:0] D;
inout [7:0] DAT;
inout [8:1] OUT;
reg [7:0] D_reg;
reg [8:1] INREG;
always @(negedge WR or negedge RESET)
begin
if (RESET == 0)
INREG <= 0;
else if (!CS && A ==
INREG <= DAT;
end
assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
assign OUT[8:1]=(INREG[8:1])?0:8'bz;
assign D = D_reg;
always @(*)
case (A[3:0])
0: D_reg = 8'd32;
1: D_reg = 8'd28;
2: D_reg = 8'd8;
3: D_reg = 8'd8;
8: D_reg = INREG[8:1];
default: D_reg = 0;
endcase
endmodule
Как для нее теперь симмуляцию написать?
//----------
//
// Title : test1_tb
// Design : 44pin
// Author :
// Company :
//
//----------
//
// File : test1_TB.v
// Generated : Tue Oct 2 16:37:19 2012
// From : c:\My_Designs\EPM3064\44pin\src\TestBench\test1_TB_settings.txt
// By : tb_verilog.pl ver. ver 1.2s
//
//----------
//
// Description :
//
//----------
`timescale 1ns / 1ps
module test1_tb;
//Internal signals declarations:
tri [8:1]OUT_bidir;
reg [8:1]OUT;
//Continous assignment for inout port "OUT".
assign OUT_bidir = OUT;
reg WR;
reg RESET;
reg RD;
reg CS;
tri [7:0]DAT_bidir;
reg [7:0]DAT;
//Continous assignment for inout port "DAT".
assign DAT_bidir = DAT;
reg [3:0]A;
wire [7:0]D;
// Unit Under Test port map
test1 UUT (
.OUT(OUT_bidir),
.WR(WR),
.RESET(RESET),
.RD(RD),
.CS(CS),
.DAT(DAT_bidir),
.A(A),
.D(D));
initial
begin
RESET=1'b0;
WR=1'b0;
RD=1'b0;
CS=1'b0;
DAT[7:0]=1'b0;
A[3:0]=1'b0;
#300 RESET=1'b1;
#300 WR=1'b1;
#300 RD=1'b1;
#300 CS=1'b1;
#300 DAT[7:0]=1'b1;
#300 A[3:0]=1'b1;
end
always #30 WR=~WR;
endmodule
не хочет с такой работать...
module test1(OUT,WR,RESET,RD,CS,DAT,A,D);
input wire [3:0] A;
input wire WR, RD, CS, RESET;
output wire [7:0] D;
inout [7:0] DAT;
inout [8:1] OUT;
reg [7:0] D_reg;
reg [8:1] INREG;
always @(negedge WR or negedge RESET)
begin
if (RESET == 0)
INREG <= 0;
else if (!CS && A ==
INREG <= DAT;
end
assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
assign OUT[8:1]=(INREG[8:1])?0:8'bz;
assign D = D_reg;
always @(*)
case (A[3:0])
0: D_reg = 8'd32;
1: D_reg = 8'd28;
2: D_reg = 8'd8;
3: D_reg = 8'd8;
8: D_reg = INREG[8:1];
default: D_reg = 0;
endcase
endmodule
Как для нее теперь симмуляцию написать?
//----------
//
// Title : test1_tb
// Design : 44pin
// Author :
// Company :
//
//----------
//
// File : test1_TB.v
// Generated : Tue Oct 2 16:37:19 2012
// From : c:\My_Designs\EPM3064\44pin\src\TestBench\test1_TB_settings.txt
// By : tb_verilog.pl ver. ver 1.2s
//
//----------
//
// Description :
//
//----------
`timescale 1ns / 1ps
module test1_tb;
//Internal signals declarations:
tri [8:1]OUT_bidir;
reg [8:1]OUT;
//Continous assignment for inout port "OUT".
assign OUT_bidir = OUT;
reg WR;
reg RESET;
reg RD;
reg CS;
tri [7:0]DAT_bidir;
reg [7:0]DAT;
//Continous assignment for inout port "DAT".
assign DAT_bidir = DAT;
reg [3:0]A;
wire [7:0]D;
// Unit Under Test port map
test1 UUT (
.OUT(OUT_bidir),
.WR(WR),
.RESET(RESET),
.RD(RD),
.CS(CS),
.DAT(DAT_bidir),
.A(A),
.D(D));
initial
begin
RESET=1'b0;
WR=1'b0;
RD=1'b0;
CS=1'b0;
DAT[7:0]=1'b0;
A[3:0]=1'b0;
#300 RESET=1'b1;
#300 WR=1'b1;
#300 RD=1'b1;
#300 CS=1'b1;
#300 DAT[7:0]=1'b1;
#300 A[3:0]=1'b1;
end
always #30 WR=~WR;
endmodule
не хочет с такой работать...
Re: вопросы по Verilog
Nevox писал(а): assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
assign OUT[8:1]=(INREG[8:1])?0:8'bz;
если нужно всю шину перевести в Z то наверное правильнее написать
assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bZZZZZZZZ;
а иначе ИМХО у вас только крайний бит в Z переведется
p.s. если я не прав - пусть меня поправят (я тоже недавно в верилоге)
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
x и z размножаются во всю ширину.
т.е. 8'bZ0 даст 8'bZZZZZZZ0, 8'b10 даст 8'b00000010
p.s. Ага, я там в первом сообщении апостроф непробил в 8'bz
Std 1364-2001 писал(а):2.5.1 Integer constants
If the size of the unsigned number is smaller than the size specified for the constant, the unsigned number shall be padded to the left with zeros. If the leftmost bit in the unsigned number is an x or a z, then an x or a z shall be used to pad to the left respectively.
т.е. 8'bZ0 даст 8'bZZZZZZZ0, 8'b10 даст 8'b00000010
p.s. Ага, я там в первом сообщении апостроф непробил в 8'bz
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: вопросы по Verilog
а вот это как переписать?
IN_REG[13..8].D = DAT[5..0];
IN_REG[7..0].D = DAT[7..0];
IN_REG[].CLK = !WR;
IN_REG[].CLRN = RESET;
IN_REG[7..0].ENA = (!CS&A[]==8);
IN_REG[13..8].ENA = (!CS&A[]==9);
IN_REG[13..8].D = DAT[5..0];
IN_REG[7..0].D = DAT[7..0];
IN_REG[].CLK = !WR;
IN_REG[].CLRN = RESET;
IN_REG[7..0].ENA = (!CS&A[]==8);
IN_REG[13..8].ENA = (!CS&A[]==9);
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
Где-то выше я что-то похожее, хоть и попроще, уже переводил.
Как-то так:
Вот короткое руководство по конструкциям verilog с картинками в лог.элементах и триггерах
Как-то так:
Код: Выделить всё
always @(negedge WR or negedge RESET)
if (!RESET)
IN_REG <= 0;
else if (!CS) begin
if (A == 8) IN_REG[ 7:0] <= DAT;
if (A == 9) IN_REG[13:8] <= DAT[5:0];
endВот короткое руководство по конструкциям verilog с картинками в лог.элементах и триггерах
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
Кстати, исходные AHDL файлы могли бы быть и покрасивее. Т.е. понятнее и сопровождаемее, при этом код генерировался бы или вообще точно такой же, или слегка другой, но с тем же действием.
Например, это (мне лень переписывать, поэтому я бросаю кусочки своего кода):
можно было записать или через таблицы
Тут HDMOD_100ms и компания -- именованные константы
Или через CASE
Например, это (мне лень переписывать, поэтому я бросаю кусочки своего кода):
Код: Выделить всё
D[7..0] = (32&(A[3..0]==0))#
(23&(A[3..0]==1))#
(14&(A[3..0]==2))#
(8&(A[3..0]==3))#
(10&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN_REG[7..0]&(A[3..0]==8))#
((gnd,gnd,IN_REG[13..8])&(A[3..0]==9))#
((gnd,gnd,gnd,gnd,CTR,gnd,gnd,vcc)&(A[3..0]==11));Код: Выделить всё
TABLE
opt_hdiv[] => hdmod[];
B"11" => HDMOD_100ms;
B"10" => HDMOD_150ms;
B"01" => HDMOD_200ms;
B"00" => HDMOD_300ms;
END TABLE;Или через CASE
Код: Выделить всё
sequ.(clk,reset) = (Clk,Reset);
CASE sequ IS
WHEN Idle =>
IF CyReq THEN sequ = CYras;
ELSIF RefEn & RefReq THEN sequ = RFcas;
ELSE sequ = Idle;
END IF;
WHEN CYras => sequ = CYmux;
WHEN CYmux => sequ = CYcas;
...Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: вопросы по Verilog
переписал эту прошивку:
получил:
в итоге показывается в программе,что светодиоды каналов [8:15] горят,а на модуле не горят. нужно чтобы не горели,что не так?
Код: Выделить всё
SUBDESIGN 16OUT
(
WR : INPUT;
RD : INPUT;
CS : INPUT;
DAT[7..0]: BIDIR;
A[3..0] : INPUT;
IN[15..0]: INPUT;
)
VARIABLE
D[7..0] : NODE;
BEGIN
D[7..0] = (16&(A[3..0]==0))#
(33&(A[3..0]==1))#
(16&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN[7..0]&(A[3..0]==8))#
(IN[15..8]&(A[3..0]==9));
DAT0 = TRI(D0,!CS&!RD);
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
END;
получил:
Код: Выделить всё
module SN_DVV_16_24_V (IN,WR,RD,CS,DAT,A);
input wire [3:0] A;
input wire [15:0]IN;
input wire WR, RD, CS;
inout [7:0] DAT;
reg [7:0] D;
assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
always @(negedge RD)
case (A)
4'b0000: D = 8'b00010000;
4'b0001: D = 8'b00100001;
4'b0010: D = 8'b00010000;
4'b0011: D = 8'b00001000;
4'b1000: D = IN[7:0];
4'b1010: D = IN[15:8];
default: D = 8'b00000000;
endcase
endmoduleв итоге показывается в программе,что светодиоды каналов [8:15] горят,а на модуле не горят. нужно чтобы не горели,что не так?
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: вопросы по Verilog
Это неэквивалентные куски кода.
В AHDL-ном по D[] идёт просто комбинационная схема, а в verliog-ном -- регистры по спаду WR.
Надо так:
D всё равно объявлять как reg. Тут это просто переменная, сохраняющая для verilog-машины своё состояние между выполнениями блока always. Он выполняется при любом изменении любого входа, поэтому данные сразу проходят на выход и нет регистра в смысле цифровых схем.
Если забыть ветку default, то будет регистр-защёлка (LATCH), помнящий состояние D пока A гуляет по всем не перечисленным комбинациям.
_____
Тьху, я и в этой теме успел на стандарт сослаться.
В AHDL-ном по D[] идёт просто комбинационная схема, а в verliog-ном -- регистры по спаду WR.
Надо так:
Код: Выделить всё
always @(*) // * - любое изменение любого сигнала
case (A)
4'b0000: D = 8'b00010000;
4'b0001: D = 8'b00100001;
4'b0010: D = 8'b00010000;
4'b0011: D = 8'b00001000;
4'b1000: D = IN[7:0];
4'b1010: D = IN[15:8];
default: D = 8'b00000000;
endcase Если забыть ветку default, то будет регистр-защёлка (LATCH), помнящий состояние D пока A гуляет по всем не перечисленным комбинациям.
_____
Тьху, я и в этой теме успел на стандарт сослаться.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: вопросы по Verilog
Здравствуйте еще раз!
Возникла такая идея:
Хотелось бы написать прошивку для модуля ввода(стоит Альтера epm3064 на 44 пина),чтобы при замене на горячую,ложная информация не уходила,пока не успели подключить провода.
а как-нибудь пропускались бы биты и потом можно было бы считывать достоверную информацию,или что-нибудь в этом роде. прошу прощения за немного кривой язык.
вот пример прошивки,которая есть щас,написанная на Verilog.
Возникла такая идея:
Хотелось бы написать прошивку для модуля ввода(стоит Альтера epm3064 на 44 пина),чтобы при замене на горячую,ложная информация не уходила,пока не успели подключить провода.
а как-нибудь пропускались бы биты и потом можно было бы считывать достоверную информацию,или что-нибудь в этом роде. прошу прощения за немного кривой язык.
вот пример прошивки,которая есть щас,написанная на Verilog.
Код: Выделить всё
SUBDESIGN SN_DVV_14_220V
(
RES, INT : INPUT;
WR : INPUT;
RD : INPUT;
CS : INPUT;
DAT[7..0]: BIDIR;
A[3..0] : INPUT;
IN[13..0]: INPUT;
)
VARIABLE
D[7..0] : NODE;
BEGIN
D[7..0] = (16&(A[3..0]==0))#
(35&(A[3..0]==1))#
(14&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN[7..0]&(A[3..0]==8));
D[5..0] = (IN[13..8]&(A[3..0]==9));
DAT0 = TRI(D0,!CS&!RD);
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
END;