Перейти к содержанию
    

Как эту схему на verilog описать?

5 minutes ago, RadiatoR said:

В этом случае AND не сработает и на выходе будет S

А зачем мне на выходе S если AND не сработал?

Если AND не сработал на выходе должно быть {5'b00000,D}

А если сработал должно быть S.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, Nick_K said:

Можно записать всё в один рядок. Тогда присутствующая нечитабельность взлетит на невероятные высоты!

module decode(input [14:12]D,input [7:0]S,output reg [7:0]R);assign R=&D?S:{5'h0,D};

Нормально всё читается. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 hours ago, Yuri124 said:

r = (& d [14:12]) ? s : {5'b0, d[14:12]};

где 

wire [7:0] s, r; // или reg [7:0] s;

Поскольку выход коммутатора - это wire. то нужно добавить assign;

assign  r = (& d [14:12]) ? s : {5'b0, d[14:12]};

6 minutes ago, zombi said:

output reg [7:0]R);R=&D?S:{5'h0,D};

не уверен, что так пойдет. Провода определяются как reg для always блоков.

И еще - почему используете &d, ведь коммутатором управляют только 3 разряда d?

Изменено пользователем Yuri124

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, zombi said:

Нормально всё читается.

На таком проекте моржет и да (и всё равно мне рагульно). А вот когда будет набор файлов под 1-2МБ, тогда я посмотрю как это прочитать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А у меня еще вопросик назрел, как у начинающего верилого мучителя.

При таких записях  5'b0   32'b0 14'h0 точно все биты будут нулями?

 

 

12 minutes ago, Yuri124 said:

И еще - почему используете &d, ведь коммутатором управляют только 3 разряда d?

Да у D много разрядов, но на вход модуля поступает только 3 шт.

 

module decode(input [2:0]D,input [7:0]S,output reg[7:0]R);assign R=&D?S:{5'h0,D};

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, zombi said:

При таких записях  5'b0   32'b0 14'h0 точно все биты будут нулями?

Да. А  5'b1 будет 5'b00001

 

Изменено пользователем Yuri124

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, zombi said:

Э нет. Так не пойдёт. Если не все разряды D в единице, то в младших разрядах R должно быть D, а не 7 !

Согласен, на нотацию портов не смотрел. Привык, что нулевой порт сверху. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/25/2020 at 1:28 AM, zombi said:

Ох уж и странный этот верилох, хош так пиши хош эдак!

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

Что будет дальше происходить с сигналом r[7:0]? Допустим - он будет потом записываться в регистр при наличии разрешающего сигнала, а при необходимости - в этот регистр записывается некая начальная комбинация xxxxxxxx.

Тогда можно просто описать поведение этого регистра, не вдаваясь в подробности - каким образом до него дойдут нужные сигналы. Необходимый для этого функционал компилятор добавит сам.

Например:

wire enable, preset, data_select;

assign data_select = & d[14:12]; //дали понятное имя сигналу управления, ну и чтобы по несколько раз не писать одно и то же

reg [7:0] r_registered;

 

always @(posedge clk)

if (preset == 1) r_registered <= 8'bxxxxxxxx;

else

   begin     // "скобки" begin/end просто чтобы выделить тело основной функции работы устройства

      if (enable == 1)

         if (data_select == 1)  r_registered <= s;

         else  r_registered <= {5'b0, data_select};

     else ;  // не обязательно

   end

 

Всё - не нужно описывать явно коммутатор и его подключение, упрощаются дебри описания устройства, более понятен принцип его работы.

Коммутатор явно не указан, но подразумевается в третьем if/else - компилятор его добавит сам.

Изменено пользователем Yuri124

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, zombi сказал:

Ну прям Pascal. Постоянно забываю ; ставить в конце строк ... 

Так ведь и в VHDL надо точки с запятой ставить. :umnik2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я только пару дней как начал verilog изучать.

Но удобство и лаконичность оного успел оценить!

Никакими HDLями до этого не пользовался.

Всё квадратиками и треугольничками на блок-схеме малевал.

Ибо всё это плис-проектирование и вообще схемотехника далекооо не главное,

я бы сказал : не более 5% важности от общей задачи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, zombi сказал:

Ну прям Pascal.

Дадада, а нам простоянно рассказывают сказки, что Верилог на Си похож.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, andrew_b said:

Верилог на Си похож

Если бы были структуры и {} вместо begin/end было бы просто восхитительно!

А так почти..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нарушение принципов KISS. Прти рефакторинге почти 90% предложенного кода я бы отправил в помойку и переписал более понятным стилем. Ещё и комментариями снабдил код.. Описывать надо не экономя пару строк кода, а чтобы было максимально понятно и просто. Ну ежели это разовая поделка - то можно писать как угодно....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...