klop 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба В общем вся соль в том что сначала запутали меня, а я потом запутал вас. Уточняю задачу: Изначально мы имеем некоторый тактовый генератор чатота с которого поступает на программируемый делитель частоты с коэфициентом деления от 1 до 65536 и на вход clk таймера задержки, который необходимо описать. С выхода делителя частоты сигналы поступают на вход set таймера задержки,т.е. set равен clk/(1...65536).Количество тактов clk, через которое сигнал set должен появится на выходе таймера задержки pinout задаётся на входе таймера prog от 0 до 65565. Задерживаться должен КАЖДЫЙ сигнал set. Например, при коэффициенте делителя частоты =2 и prog=1 должно получиться следующее: 0011001100110011001100110011001100 clk 0011110000111100001111000011110000 set 0000001111000011110000111100001111 pinout Вот надеюсь так будет правильнее. Даа. В самом общем случае вам нужнен сдвиговый регистр состоящий всего лишь из 65536 триггеров и небольшой мультиплексор 65536->1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
darkniisiis 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба :) еще один глупый вопрос - что должно быть на выходе при коэффициенте делителя = 1 ? При коэффициенте делителя=1 на выходе делителя получаем clk без изменений.Возьмём старый пример,изменив только коэффициент делителя частоты на 1,вот что должно быть: 001100110011001100110011001100 clk 001100110011001100110011001100 set 000011001100110011001100110011 out_clk А сделать проще делитель и "сдвиг" совместно. Тогда только счетчиками можно обойтись. Рационализация-вещь хорошая,если она приведёт к хорошим результатам буду только рад :) при этом для справки делитель имеет входы clk,prog_clk,res_clk,set_clk и выход out_clk(вход set для таймера) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Victor 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба Вот вы опять себе противоречите - в этой диаграмме OUT_CLK сдвинут на половину такта CLK относительно SET... Собственно это уже единственное, что мешает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
darkniisiis 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба Вот вы опять себе противоречите - в этой диаграмме OUT_CLK сдвинут на половину такта CLK относительно SET... Собственно это уже единственное, что мешает... Извиняюсь,мой косяк,неправильно набрал, вот: При коэффициенте делителя=1 на выходе делителя получаем clk без изменений.Возьмём старый пример,изменив только коэффициент делителя частоты на 1,вот что должно быть: 001100110011001100110011001100 clk 001100110011001100110011001100 set 000000110011001100110011001100 out_clk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Victor 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба Тогда, собственно останется только с верилога на VHDL переложить... ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба При коэффициенте делителя=1 на выходе делителя получаем clk без изменений.Возьмём старый пример,изменив только коэффициент делителя частоты на 1,вот что должно быть: 001100110011001100110011001100 clk 001100110011001100110011001100 set 000000110011001100110011001100 out_clk //////////////////////////////////////// такое Вы никогда не получите в системе, состоящей из двух взаимосвязанных счетчиков. Без базисной подготовки в области схемотехники Вам никакой VHDL не поможет. Я набросал Вам тестовых пример, который покрывает Вашу задачу. Посмотрите, что можно, а что нельзя. Как бы Вы не крутили, из этой колеи никуда не денетесь. И не говорите, что Ваш моделсим не поддерживает верилог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Victor 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба По любому нужен двойной клок. Если он есть, то вот вериложный модуль. За сумбурность извините, на коленке написано :) но работать должно :) module abc ( input clk, input clk2x, input [15:0] divider_param, input [15:0] shifter_param, output set_clk, output out_clk ); wire out; reg [15:0] r_divider = 0; reg [15:0] r_divider_counter = 0; reg [15:0] r_shifter = 0; reg r_shifter_counter_reset = 0; reg r_shifter_counter_reset_r0 = 0; reg [15:0] r_shifter_counter = 0; reg [15:0] r_shifter_startup_timer = 0; reg r_out = 0; reg r_set = 0; reg r_divider_new = 0; reg r_shifter_new = 0; assign set_clk = (divider_param == 0) ? clk : r_set; assign out_clk = (divider_param == 0) ? clk : out; assign out = (shifter_param == 0) ? r_set : r_out; always @(posedge clk2x) begin if (r_divider != divider_param) begin r_divider <= divider_param; r_divider_new <= 1'b1; end else begin r_divider_new <= 1'b0; end end always @(posedge clk2x) begin if (r_shifter != shifter_param) begin r_shifter <= shifter_param; r_shifter_new <= 1'b1; end else begin r_shifter_new <= 1'b0; end end always @(posedge clk2x) begin if ((r_divider_new == 1'b1) || (r_shifter_new == 1'b1)) begin r_divider_counter <= r_divider; end else if (r_divider_counter == r_divider) begin r_divider_counter <= 16'b0; end else begin r_divider_counter <= r_divider_counter + 1; end end always @(posedge clk2x) begin if ((r_shifter_counter_reset == 1'b1) || (r_shifter_counter_reset_r0 == 1'b1)) begin r_shifter_counter <= 17'b0; end else if (r_shifter_counter == r_divider) begin r_shifter_counter <= 17'b0; end else begin r_shifter_counter <= r_shifter_counter + 1; end end always @(posedge clk2x) begin if ((r_divider_new == 1'b1) || (r_shifter_new == 1'b1)) begin r_set <= 1'b0; end else if (r_divider_counter == 16'b0) begin r_set <= ~r_set; end end always @(posedge clk) begin if ((r_divider_new == 1'b1) || (r_shifter_new == 1'b1)) begin r_shifter_counter_reset <= 1'b1; r_shifter_startup_timer <= 16'd1; end else if (r_shifter_startup_timer != r_shifter) begin r_shifter_startup_timer <= r_shifter_startup_timer + 1; end else if (r_shifter_startup_timer == r_shifter) begin r_shifter_counter_reset <= 1'b0; end end always @(posedge clk2x) begin r_shifter_counter_reset_r0 <= r_shifter_counter_reset; end always @(posedge clk2x) begin if ((r_divider_new == 1'b1) || (r_shifter_new == 1'b1)) begin r_out <= 1'b0; end else if (r_shifter_counter == 0) begin r_out <= ~r_out; end end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
darkniisiis 0 26 октября, 2006 Опубликовано 26 октября, 2006 · Жалоба to sazh and Victor Ребята,я вам безмерно благодарен за оказанную помощь, но для меня это сейчас всё равно что заставить собаку читать "Войну и мир". К сожелению верилога я незнаю абсолютно и работать с ним не имею возможности. Вас больше о чём-либо просить совесть не позволяет, но может быть подскажете к кому или куда можно обратиться за переводом ваших текстов в VHDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klop 0 26 октября, 2006 Опубликовано 26 октября, 2006 (изменено) · Жалоба to sazh and Victor Ребята,я вам безмерно благодарен за оказанную помощь, но для меня это сейчас всё равно что заставить собаку читать "Войну и мир". К сожелению верилога я незнаю абсолютно и работать с ним не имею возможности. Вас больше о чём-либо просить совесть не позволяет, но может быть подскажете к кому или куда можно обратиться за переводом ваших текстов в VHDL? Veriloog always @(posedge clk2x) begin if (r_shifter != shifter_param) begin r_shifter <= shifter_param; r_shifter_new <= 1'b1; end else begin r_shifter_new <= 1'b0; end end VHDL : process(clk2x) begin if(clk2x='1' and clk2x'event) then -- posedge clk2x if (r_shifter /= shifter_param) then r_shifter <= shifter_param; r_shifter_new <= '1'; else r_shifter_new <= '0'; end if; end if; end process; Изменено 26 октября, 2006 пользователем klop Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
darkniisiis 0 30 октября, 2006 Опубликовано 30 октября, 2006 (изменено) · Жалоба to sazh ///////////////////// такое Вы никогда не получите в системе, состоящей из двух взаимосвязанных счетчиков./////////////////// Остался маленький вопрос-почему?Я схемотехникой не занимаюсь -моё дело описать то что мне дали на VHDL. Схемотехник, давший мне такую конструкцию был удивлён вашим ответом и я теперь в полном тупике. Так всё же почему???? to victor А без двойного клока обойтись никак нельзя? Ну нету у меня его и взять неоткуда,неужели ситуация тупиковая???????????????????? А если поставить ещё один делитель или умножитель частоты вместо второго клока сработает? Изменено 30 октября, 2006 пользователем darkniisiis Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klop 0 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Я схемотехникой не занимаюсь -моё дело описать то что мне дали на VHDL. Даа. Беда то какая. Описать алгоритм который не представляешь сам одинаково трудно хоть на С/С++ хоть на VHDL/Verilog хоть на Бейсик. За время этой беседы запросто мможно было кое чему научиться из области схемотехники. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Я схемотехникой не занимаюсь -моё дело описать то что мне дали на VHDL. Вы удивитесь, но вы и не программист. Разработка FPGA --- это между схемотехникой и программингом. ИМХО, доля первой составляющей несколько больше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
darkniisiis 0 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Даа. Беда то какая. Описать алгоритм который не представляешь сам одинаково трудно хоть на С/С++ хоть на VHDL/Verilog хоть на Бейсик. За время этой беседы запросто мможно было кое чему научиться из области схемотехники. Да если бы дело было в алгоритме, меня бы здесь не было. А вот представьте себе человека которому показали VHDL, а что это за хреновина толком не объяснили, но заставили сразу программить. Я конечно понимаю что все люди рождаются сразу гениями и всё знают,но я видимо не из таких,поэтому и пытаюсь задавать вопросы. Вы удивитесь, но вы и не программист. Разработка FPGA --- это между схемотехникой и программингом. ИМХО, доля первой составляющей несколько больше. я не удивлюсь, и с вами полностью согласен, осталось это только в голове уложить по полочкам Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Схемотехник, давший мне такую конструкцию ////// Какую такую конструкцию Вам дал схемотехник. Карандашом от балды времянку нарисовал? Вы у него схему попросите. И переведите ее в VHDL. А лучше спросите у этого схемотехника, почему он свою работу на Вас переложил. Потому что то, что мы сейчас обсуждаем никакого отношения к программированию не имеет. Это не программа. Это описание схемы латинскими буквами. А можно и прямыми линиями в графике описать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
darkniisiis 0 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба схема есть, и самое интересное в ней это два квадратика с названием "программмируемый делитель частоты" и "таймер задержки" и временные диаграммы.Вот. А я поначалу не понял что одной логикой не отделаешься, но дороги назад нет. Работу делать надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться