Raven 8 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Уже слишком много слов сказано в этом треде. И надеюсь, определенный педагогический эффект от вопросов iosifk получен TC'ом. А теперь сделаем следующий шаг - тот же код, но улучшенный :-). С комментариями. Т.е., применим теперь методу "смотри и делай, как я" :). А если сможешь - делай даже лучше, чем я. localparam int unsigned SYS_CLOCK_FREQ = 50000000; // Частота CLK в герцах. Взял с потолка (50 MHz - часто используемый клок на DevBoard'ах). localparam int unsigned LED_COUNTER_WIDTH = $bits(SYS_CLOCK_FREQ/2); // $bits() дает кол-во битов для представления величины в скобках. module Ensider( input wire clock, // Делаем отступы, ну, хотя бы 4 пробела, например output wire [7:0] led // Для лучшего зрительного восприятия кода ); reg [LED_COUNTER_WIDTH-1:0] cnt; logic timer_2Hz; // Привнесем еще немного SystemVerilog специфики :) Пока намеренно оставим смесь вериложных и // системвериложных конструкций (это потом вам на домашнее задание останется - привести все в порядок) logic timer_1Hz; always @(posedge clock) begin // Привыкайте лучше сразу все вложенные блоки оформлять // в виде "begin .. end" блоков, даже для единственного оператора внутри // Это будет полезно при дальнейших модификациях кода - будет одной потенциальной ошибкой меньше // Reset части пока нет - за отстутсвием такого сигнала в вашем модуле. Жаль. Но опробуем пока без него if (cnt == (SYS_CLOCK_FREQ/2 - 1)) begin timer_2Hz <= 1'b1; // Этот сигнал будет выставляться в лог.1 на 1 такт с периодом 1/(SYS_CLOCK_FREQ/2), т.е., cnt <= '0; // с частотой 2 Гц. Счетчик cnt при этом сбрасывается. end else begin cnt <= cnt+1; // В иных случаях счет разрешен, timer_2Hz <= 1'b0; // а сигнал таймера д.б. занулен. end end // Подключим все LED'ы, кроме старшего //assign [color="#FF0000"]#1[/color] led = cnt[27:20]; // #1 - эта часть оператора будет синтезатором проигнорирована напрочь, она, даже можно сказать, вредна при // написании кода, предназначенного для синтеза и последующего использования в FPGA (т.к. при симулировании // этого же кода #1 будет создавать вредное расхождение между реальным положением дел и симуляционной // картинкой). // Поэтому ... assign led[6:0] = cnt[LED_COUNTER_WIDTH-1 -: 7]; // Обратите внимание на эту конструкцию "[msb -: width]" - очень полезная вещь. // Она выбирает 7 битов, начиная от старшего. // У нее, кстати, есть "близкий родственник": [lsb +: width] // Осталось применить счетчик-делитель на 2 always_ff @(posedge clock) begin if (timer_2Hz == 1'b1) begin timer_1Hz <= ~timer_1Hz; end end // И наконец - то, что вы хотели получить: сигнал с частотой 1 Гц. В данном случае на светодиоде led[7]. assign led[7] = timer_1Hz; endmodule Комментарии и вопросы приветствуются, от кого бы ни исходили :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Уже слишком много слов сказано в этом треде. И надеюсь, определенный педагогический эффект от вопросов iosifk получен TC'ом. А теперь сделаем следующий шаг - тот же код, но улучшенный :-). С комментариями. Т.е., применим теперь методу "смотри и делай, как я" :). А если сможешь - делай даже лучше, чем я. Комментарии и вопросы приветствуются, от кого бы ни исходили :). тогда уже до кучи и заголовок. Например как у Ксайлинкса... //----------------------------------------------------------------------------- // // Copyright © 2009 Xilinx Inc. // // Project : Programmable Wave Generator // Module : clk_div.v // Parent : wave_gen.v // Children : None // // Description: // This module is a programmable divider use for generating the sample // clock (clk_samp). It continuously counts down from pre_clk_tx-1 to // 0, asserting en_clk_samp during the 0 count. // // To ensure proper reset of the FFs running on the derived clock, // en_clk_samp is asserted during reset. // // Parameters: // // Notes : // pre_clk_tx must be at least 2 for this module to work. Since // it is not allowed to be <32 (by the parser), this is not a problem. // // Multicycle and False Paths // None Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Приветствую! Комментарии и вопросы приветствуются, от кого бы ни исходили :). Раз уж reset отсутствует то не мешало бы позаботится также о инициализации при симуляции. Чтобы симулятор не посылал на "XXX" :) ... /* synthesis translate_off */ initial begin timer_1Hz=1'b0; cnt={LED_COUNTER_WIDTH{1'b0}}; end /* synthesis translate_on */ ... Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 11 марта, 2017 Опубликовано 11 марта, 2017 (изменено) · Жалоба Сначала забудьте слово "программирование". В микроконтроллере - фиксированная структура железа, а прядок работы записан программой в памяти. В ПЛИС нет программы. И нет фиксированной структуры. Именно ее Вы и описываете. А вот то, как будет себя вести ПЛИС зависит от описания и входных сигналов... Поэтому методика разработки тут другая совершенно. Написал я в итоге более менее исполняемый код.И проверил его в Module Sim составив Тестбенч. Теперь основная проблема состоит в самой схеме ,как определить у неё где находится пин ,который отвечает за светодиод ,где пин который отвечает за тактовый генератор? Диод:LED[1] : 84 : output : 2.5 V : : 5 : Y Тактовый генератор:ADC_CLC 12 Верно? Изменено 11 марта, 2017 пользователем Ensider Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 11 марта, 2017 Опубликовано 11 марта, 2017 · Жалоба Теперь основная проблема состоит в самой схеме ,как определить у неё где находится пин ,который отвечает за светодиод ,где пин который отвечает за тактовый генератор?Пины назначаются разработчиком (то есть вами) в соответствии со схемой электрической принципиальной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 11 марта, 2017 Опубликовано 11 марта, 2017 · Жалоба Пины назначаются разработчиком (то есть вами) в соответствии со схемой электрической принципиальной. Я понимаю.Просто хочу удостовериться , что я правильно указал их. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться