Например TDA7294

Форум РадиоКот • Просмотр темы - вопросы по Verilog
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб дек 07, 2019 00:19:10

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 68 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: вопросы по Verilog
СообщениеДобавлено: Пн окт 01, 2012 14:05:28 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
Здравствуйте, решил перейти с 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;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Пн окт 01, 2012 15:05:14 
Держит паяльник хвостом
Аватар пользователя

Карма: 9
Рейтинг сообщений: 40
Зарегистрирован: Сб апр 02, 2011 18:59:22
Сообщений: 995
Откуда: Город-герой Севастополь
Рейтинг сообщения: 0
Тема называется "вопросы по Verilog", а вопросов и не видно. Только "помогите". Может, для начала как-то описательную часть топика сформулировать? Что за устройство, какое ТЗ, с кем общается. А то сходу - какой-то модуль.

_________________
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Пн окт 01, 2012 15:09:33 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
микросхема 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);

как на верилог переписать это?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Пн окт 01, 2012 15:36:43 
Держит паяльник хвостом
Аватар пользователя

Карма: 9
Рейтинг сообщений: 40
Зарегистрирован: Сб апр 02, 2011 18:59:22
Сообщений: 995
Откуда: Город-герой Севастополь
Рейтинг сообщения: 0
А в скобках что описывается? Какие-то условия подачи сигнала? Сейчас о первой части.

_________________
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение


Вернуться наверх
 
Видеокурс «Работаем с микроконтроллерами STM32G0». Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Пн окт 01, 2012 15:40:50 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
Да,условия подачи сигнала.

Выход DAT0, к нему подключаются сигналы D1 , и сумма инвертированных сигналов CS и RD).TRI дает нам Z состояние.


Вернуться наверх
 
Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования>>
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Вт окт 02, 2012 09:24:12 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
никто не знает?


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Вт окт 02, 2012 10:13:09 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Nevox писал(а):
DAT0 = TRI(D0,!CS&!RD); % сигнал с выхода трехразрядного буфера TRI подается на I/O порт %
...
DAT7 = TRI(D7,!CS&!RD);
Тут хорошо идёт С-шная тернарная операция ?:
Код:
assign DAT = !CS && !RD ? D : 8bz; 

Nevox писал(а):
% соединение порта 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);
Тут posedge WR если запись в регистр по фронту WR. По фрагменту AHDL получается, что запись по спаду, так что negedge. Сброс низким уровнем на RESET
Код:
always @(negedge WR or negedge RESET)
begin
    if 
(RESET == 0)
        INREG <= 0;
    else if (!CS && A == 8)
        INREG <= DAT;
end

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Вт окт 02, 2012 10:28:14 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
а как вот это расписать?

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));


Вернуться наверх
 
Распродажа паяльных станций ATTEN и аксессуаров!
Индукционная паяльная станция AT315D - 3 977 ₽, станция паяльная AT80D – 2177 ₽, станция паяльная AT936b – 1000 ₽!

Заходите в раздел акции и спецпредложения на сайте prist.ru, покупайте измерительные приборы, инструмент и паяльно-ремонтное оборудование по специальным ценам.
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Вт окт 02, 2012 10:57:01 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
В первом сообщении D это input wire, тут уже другой D ?
Можно так же через И/ИЛИ, но это неинтересно. Можно так:
Код:
  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
Однако вопрос -- что-то почитать по veilog пробовали?

Ладно, вчера (после 13-часовой отрисовки схем в воскресенье) сделал себе выходной, потоптался на форумах, а сегодня пора и за работу.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Вт окт 02, 2012 11:00:27 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
да,читаю кучу всего,в том числе и книги на английском.
Просто из-за изобилия информации все идет не сразу, поэтому и спрашиваю параллельно на форуме.
По конкретному примеру легче разобраться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Вт окт 02, 2012 16:15:02 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Погуглите слова evita verilog, у них были презенташки-слайды на десяток страниц по основным операциям, хороши для быстрого старта. Но потом всё равно что-то посерьёзнее найдите почитать.

Я, по обыкновению своему, после короткого вступления сразу в стандарт лезу, но оно суховато идёт с непривычки :-)

О, ещё на сайте у Иосифа Каршенбойма цикл статей «Краткий курс HDL-кодирования» тоже, на мой взгляд, неплохо для начинающих.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Ср окт 03, 2012 09:03:42 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
немного не по верилогу! Написал прошивку в итоге)

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 == 8)
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
СообщениеДобавлено: Пт окт 05, 2012 21:01:31 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 20:16:07
Сообщений: 654
Рейтинг сообщения: 0
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. если я не прав - пусть меня поправят (я тоже недавно в верилоге)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Пт окт 05, 2012 23:45:05 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
x и z размножаются во всю ширину.

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
СообщениеДобавлено: Ср окт 10, 2012 15:48:19 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
а вот это как переписать?

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);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Ср окт 10, 2012 23:38:45 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Где-то выше я что-то похожее, хоть и попроще, уже переводил.
Как-то так:
Код:
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 с картинками в лог.элементах и триггерах

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Чт окт 11, 2012 00:12:47 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Кстати, исходные AHDL файлы могли бы быть и покрасивее. Т.е. понятнее и сопровождаемее, при этом код генерировался бы или вообще точно такой же, или слегка другой, но с тем же действием.
Например, это (мне лень переписывать, поэтому я бросаю кусочки своего кода):
Код:
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;
Тут HDMOD_100ms и компания -- именованные константы
Или через 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
СообщениеДобавлено: Пт окт 19, 2012 09:47:12 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
переписал эту прошивку:

Код:
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] горят,а на модуле не горят. нужно чтобы не горели,что не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Пт окт 19, 2012 14:11:31 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Это неэквивалентные куски кода.
В 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
D всё равно объявлять как reg. Тут это просто переменная, сохраняющая для verilog-машины своё состояние между выполнениями блока always. Он выполняется при любом изменении любого входа, поэтому данные сразу проходят на выход и нет регистра в смысле цифровых схем.
Если забыть ветку default, то будет регистр-защёлка (LATCH), помнящий состояние D пока A гуляет по всем не перечисленным комбинациям.

_____
Тьху, я и в этой теме успел на стандарт сослаться.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопросы по Verilog
СообщениеДобавлено: Ср дек 19, 2012 08:56:21 
Потрогал лапой паяльник

Зарегистрирован: Чт авг 09, 2012 09:57:20
Сообщений: 398
Рейтинг сообщения: 0
Здравствуйте еще раз!

Возникла такая идея:

Хотелось бы написать прошивку для модуля ввода(стоит Альтера 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;


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 68 ]  1, , ,  

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y