Faton_11 0 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба Добрый день. Счетчик состоит из 4 триггеров. После состояния 1010, счетчик должен сброситься в 0000, но вместо этого триггеры устанавливаются в значения 1111, и только потом в 0000. Как это можно исправить? Ещё вопросы: - Может ли Квартус по составленной схеме выдать свой вариант описания её в коде? - Можно ли симулировать файлы bdf в моделсим? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба А зачем вы влепили инверторы на выходах триггеров? Из за них оно и сбрасывается в 1111 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
semperante 0 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба Нет, напрямую схематик-файлы в моделсим загонять нельзя. Есть генерация кода через меню File -> Create -> Create HDL Design File. Но все триггера и прочие элементы вставятся как компоненты. Кроме того, функция часто глючит, связи между компонентами нужно проверять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба XVR, иначе счетчик получается вычитающий Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaslovVG 0 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба Если не хотите проблем собирайте синхронный счетчик на D тригерах. В вашей схеме полно гонок, и срабатывание сброса непредсказуемо. Кроме того тригера в вашей схеме переключаются по фронту(нарастанию) такта и счетчик получается вычитающий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба в том то и дело, что необходимо построить его именно на JK-триггерах. Как можно составляя схему указать, что триггеры должны переключаться по спаду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба XVR, иначе счетчик получается вычитающий Поставьте инверторы на входы С триггеров. PS. Если вы действительно собираетесь это реализовывать в FPGA, то эта схема не пойдет - делайте синхронный дизайн (как MaslovVG сказал). в том то и дело, что необходимо построить его именно на JK-триггерах.Синхронный дизайн никак не помешает применить JK триггера. Тем более, что сейчас у вас фактически не JK триггера, а T триггера - вы же им J и K входы намертво в '1' поставили. Кстати, вам нужен схематик, или HDL описание? Второе здесь текстом написать можно, а схему вам далеко не каждый сможет подсказать, т.к. не у всех есть редактор схем под рукой :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба Ещё вопросы: - Может ли Квартус по составленной схеме выдать свой вариант описания её в коде? - Можно ли симулировать файлы bdf в моделсим? Называется "сделай то, не знаю что"... Если говорить о HDL, то ни о каких JK триггерах и речи быть не может... Текстом написали и все, остальное компилятор сделает сам... Или же пишите статический автомат, убирайте птичку "one-hot" и все дела.. В Квартусе берите темплейты, там уже все заготовки сделаны... И будет Вам моделсим... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 12 ноября, 2013 Опубликовано 12 ноября, 2013 · Жалоба Все, буду писать код, только странно использовать в нем регистр state - счетчик в счетчике получается. Так, наверно, делать нельзя? И если описан один триггер, то как соединить все между собой? Создавать экземпляры модулей? module JK_Counter ( input rst,clk,J,K, output reg Q, output wire Qinv, output reg [3:0] state, output reg Q1, output reg Q2, output reg Q3 ); assign Qinv=~Q; always@(posedge rst or posedge clk) if (rst) state=0; else case (state) 10: state=0; default:state=state+1; endcase always@(posedge clk) if (state==0) Q=0; else if (state<11) Q=(J&~Q)|(~K&Q); endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 13 ноября, 2013 Опубликовано 13 ноября, 2013 · Жалоба Все, буду писать код, только странно использовать в нем регистр state - счетчик в счетчике получается. Так, наверно, делать нельзя? И если описан один триггер, то как соединить все между собой? Создавать экземпляры модулей? Хотелось бы посоветовать! Вы когда создаете устройства в схемотехническом редакторе - Вы мыслите триггерами, логическими элементами и т.д. и т.п. А когда Вы описываете принцип работы устройства используя языки описания аппаратуры было бы правельней если Вы абстрагируйтесь от классических модулей счетчиков, триггеров. Просто дело в том, что есть категория людей которая описывает не принцип работы, а СХЕМУ....просто повторяют нарисованное при помощи конструкция языка. Наверное это бесмысленно. Подумайте, возможно этот опыт будет Вам полезен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZASADA 0 13 ноября, 2013 Опубликовано 13 ноября, 2013 · Жалоба на hdl такой счетчик займет пару строк описания. xilinx в встроенной справке дает готовые шаблоны любых блоков на vhdl/verilog. достаточно выбрать подходящий и слегка изменить. например на простейший счетчик выдает такой шаблон: process (<clock>) begin if <clock>='1' and <clock>'event then <count> <= <count> + 1; end if; end process; ваш будет выглядеть как-то так: process (clock) begin if clock='0' and clock'event then if q="1010" then q <= "0000"; else q <= q + 1; end if; end if; end process; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 13 ноября, 2013 Опубликовано 13 ноября, 2013 · Жалоба Все, буду писать код, только странно использовать в нем регистр state - счетчик в счетчике получается. Так, наверно, делать нельзя? И если описан один триггер, то как соединить все между собой? Создавать экземпляры модулей?Вам нужен именно счетчик на JK триггерах? Если да, то описывайте JK триггер модулем, а потом собирайте из них счетчик. Если нужен просто HDL счетчик от 0 до 10, то и пишите его, как ZASADA советовал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 13 ноября, 2013 Опубликовано 13 ноября, 2013 · Жалоба на hdl такой счетчик займет пару строк описания. xilinx в встроенной справке дает готовые шаблоны любых блоков на vhdl/verilog. достаточно выбрать подходящий и слегка изменить. например на простейший счетчик выдает такой шаблон: process (<clock>) begin if <clock>='1' and <clock>'event then <count> <= <count> + 1; end if; end process; ваш будет выглядеть как-то так: process (clock) begin if clock='0' and clock'event then if q="1010" then q <= "0000"; else q <= q + 1; end if; end if; end process; Присоединяюсь. Вот эта ссылка возможно полезна будет. Там есть множество примеров в том числе и счётчик простой инкрементирующий Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 13 ноября, 2013 Опубликовано 13 ноября, 2013 · Жалоба Можно типа так: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity codecounter is Generic ( --размерность счетчиа code_width : integer := 16 ); Port ( -- входной клок clk : in std_logic; -- глобальный сброс clr : in std_logic; -- код code_in : in std_logic_vector(code_width - 1 downto 0); -- выход cnt_out : out std_logic ); end entity codecounter; architecture behavioural of codecounter is signal s_cnt_out : std_logic; signal s_div : std_logic_vector (code_width - 1 downto 0); begin -------------------------------------------------------------------- -- делитель управляемый кодом -------------------------------------------------------------------- process (clk, clr) begin if clr = '0' then s_div <= (others => '0'); s_cnt_out <= '0'; elsif clk'event and clk = '1' then s_div <= s_div - 1; -- сравнение текущего состояния с кодом if s_div = 0 then s_div <= code_in - 1; -- перенос s_cnt_out <= '0'; else s_cnt_out <= '1'; end if; end if; end process; -- выход cnt_out <= s_cnt_out; end behavioural; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 14 ноября, 2013 Опубликовано 14 ноября, 2013 · Жалоба Если не хотите проблем собирайте синхронный счетчик на D тригерах. В вашей схеме полно гонок, и срабатывание сброса непредсказуемо. Кроме того тригера в вашей схеме переключаются по фронту(нарастанию) такта и счетчик получается вычитающий. А по моему схема синхронная... Если конечно описать выход каждого флопа как generated_clock.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться