Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Простое ОЗУ [3:0]
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
demsp
Делаю простое ОЗУ
Flip-fl0p
Цитата(demsp @ Mar 28 2018, 18:57) *
Делаю простое ОЗУ - создаю несколько триггреров reg q (запись производится по фронту)
Код
module my_dff (
input clk,
input d,    
output...);
    reg q;
    always @(posedge clk)
        q <= d;
assign...
endmodule

Подключаю их в основной модуль, записть в выбранный триггер произвожу демультиплексором ссылка
Код
module my_module(
input...
output...);

//демультиплексор
reg [3:0]out;
always @ *
begin
  case( addr )
   2'd0: out = { 3'b000, clk      };
   2'd1: out = { 2'b00, clk, 1'b0 };
   2'd2: out = { 1'b0, clk, 2'b00 };
   2'd3: out = {      clk, 3'b000 };
  endcase
end

//триггеры
my_dff dff1 (
.d(d),
.clk(out[0])     );
my_dff dff2 (... );
my_dff dff3 (... );
my_dff df4 (... );


Но вот странно:
Запись в триггер происходит как по фронту, так и по спаду (при переключении на другой адрес) , т.е. я переключаюсь, например, с 00 на 01, и в триггер с адресом 00 производится запись (как-бы по спаду).
Если я остаюсь на одном адресе, запись нового значения по спаду не производится.

Хотите правильно : берите листок бумаги и рисуете на ней все триггеры, которые Вам нужны, все клоки, все сигналы разрешения, все входы и выходы. И когда на бумаге будет схема - описывайте её на языке HDL.
Более того, если что-то выкладывайте - то выкладывайте полностью кусок кода, в котором ошибка. Сейчас я вижу непонятный огрызок кода, в этом огрызке написана полная ерунда, извините меня за резкость.
demsp
Вот картинка - на вход DEMUX'а подключен клок


Запись в триггеры должна происходить по фронту
Код
always @(posedge clk)

но запись в триггер происходит также при HIGH на клоке при смене адреса (т.е. по спаду)
Flip-fl0p
Цитата(demsp @ Mar 28 2018, 20:30) *

Это плохая картинка. Тут скорее показано как делать не надо в ПЛИС rolleyes.gif
Для организации памяти у производителей чипов есть заготовки файлов различного рода памяти. Лучше воспользуйтесь ими.
Или изучите что-то типа "recommended hdl coding styles" для семейства ПЛИС с которым Вы работаете.
На самый крайний случай, если это какая-то лабораторная в институте то можно и так описать:
https://ibb.co/mNpkZn
iosifk
Цитата(demsp @ Mar 28 2018, 18:57) *
Делаю простое ОЗУ

Для начала: ОЗУ - это когда "много" битов хранится.
А то, что Вы выкладываете - это скорее регистр с произвольной записью битов.
А вот далее - это просто тихий ужас, летящий на крыльях верилога...
demsp
Цитата(iosifk @ Mar 28 2018, 22:37) *
Для начала: ОЗУ - это когда "много" битов хранится.

Спасибо, действительно, в этом простом ОЗУ вместо триггеров должны быть регистры, но сути вопроса это не меняет.


Цитата(Flip-fl0p @ Mar 28 2018, 22:24) *
Для организации памяти у производителей чипов есть заготовки файлов различного рода памяти. Лучше воспользуйтесь ими.

Дайте ссылку плиз
OM-S
Цитата(demsp @ Mar 28 2018, 23:56) *
Спасибо, действительно, в этом простом ОЗУ вместо триггеров должны быть регистры, но сути вопроса это не меняет.



Дайте ссылку плиз

Например у Ксайлинкса в документе ug687 в разделе 6 HDL coding techniques
http://www.xilinx.com/support/documentatio..._4/xst_v6s6.pdf
Flip-fl0p
Цитата(demsp @ Mar 28 2018, 23:56) *
Дайте ссылку плиз

https://google.gik-team.com/?q=recommended+hdl+coding+styles

Цитата(demsp @ Mar 28 2018, 23:56) *
Спасибо, действительно, в этом простом ОЗУ вместо триггеров должны быть регистры, но сути вопроса это не меняет.

А в чем разница между триггером и регистром ?
demsp
Цитата(Flip-fl0p @ Mar 29 2018, 08:26) *
А в чем разница между триггером и регистром ?

триггер (в русскоязычной литературе) - это флип-флоп (в англоязычной литературе)
Вот одна и та же статья из Википедии на русском триггер
и на английском flip-flop
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.