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

Автоматический сброс на System Verilog

4 minutes ago, MrGalaxy said:

Можно глупый вопрос?

Оказался абсолютно не глупым, а даже очень рабочим.

Спасибо, заработал.

Я предполагал, что изначально регистры обнулены или в в крайнем случае не определены.

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


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

6 minutes ago, MrGalaxy said:

RadiatoR,

Можно глупый вопрос?

Вот так не пробовали:


reg [4 : 0] delay = 4'b0000;

?

Глупый ответ - правильно так:

reg [4:0] delay = 5'b0;

 

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


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

4 minutes ago, RadiatoR said:

С ними проще - железо детерминировано и цепи сброса сформированы.

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

В FPGA можете зарегистрировать внешнее событие? Внутреннее событие? Создать логику, которая сработает в зависимости от настроек и внешнего события?

 

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


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

Только что, blackfin сказал:

Глупый ответ - правильно так:


reg [4:0] delay = 5'b0;

 

Да, ступил, там же 5 разрядоФФ. :dash1::biggrin:

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


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

4 minutes ago, iosifk said:

Я же написал "холодный сброс" и "горячий сброс". 

Это я понял =), просто у меня логика фпга маленькая и холодный сброс он же горячий, делает одно и то же. То есть ресет сбрасывает все используемые регистры, счетчики, все от чего зависит логика. Глубже только переконфигурация.

8 minutes ago, iosifk said:

А что касается " нечего скормить ModelSim в качестве описания этого SPI", то на несинтезируемых конструкциях имитатор SPI делается за 10 мин. Хотя я уверен, что модель SPI производитель предоставляет. Ведь даже изготовители микросхем памяти дают модели памяти для совместной симуляции проекта.

Допускаю, но накидывать функционал SPI и шины для него я не хотел, да и зачем.. А на счет готовых моделей не искал, даже и не думал в эту стороны. Спасибо за наводку.

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


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

4 минуты назад, RadiatoR сказал:

Это я понял =), просто у меня логика фпга маленькая и холодный сброс он же горячий, делает одно и то же. То есть ресет сбрасывает все используемые регистры, счетчики, все от чего зависит логика. Глубже только переконфигурация.

Если у вас сброс приходит в ПЛИС, то вот как это делает ксайлинкс

//-----------------------------------------------------------------------------
//  
//  Copyright (c) 2008 Xilinx Inc.
//
//  Project  : Programmable Wave Generator
//  Module   : reset_bridge.v
//  Parent   : Various
//  Children : None
//
//  Description: 
//    This is a specialized metastability hardener intended for use in the
//    reset path. The reset will assert ASYNCHRONOUSLY when the input reset is
//    asserted, but will deassert synchronously.
//
//    In designs with asynchronous reset flip-flops, this generates a reset
//    that can meet the "recovery time" requirement of the flip-flop (be sure
//    to enable the recovery time arc checking - ENABLE=reg_sr_r).
//
//    In designs with synchronous resets, it ensures that the reset is
//    available before the first valid clock pulse arrives.
//
//  Parameters:
//    None
//
//  Notes       : 
//
//  Multicycle and False Paths, Timing Exceptions
//    A tighter timing constraint should be placed between the rst_meta
//    and rst_dst flip-flops to allow for meta-stability settling time
//

`timescale 1ns/1ps


module reset_bridge (
  input            clk_dst,      // Destination clock
  input            rst_in,       // Asynchronous reset signal
  output reg       rst_dst       // Synchronized reset signal
);


//***************************************************************************
// Register declarations
//***************************************************************************

  reg           rst_meta;        // After sampling the async rst, this has
                                 // a high probability of being metastable.
                                 // The second sampling (rst_dst) has
                                 // a much lower probability of being
                                 // metastable

//***************************************************************************
// Code
//***************************************************************************

  always @(posedge clk_dst or posedge rst_in)
  begin
    if (rst_in)
    begin
      rst_meta <= 1'b1;
      rst_dst  <= 1'b1;
    end
    else // if !rst_dst
    begin
      rst_meta <= 1'b0;
      rst_dst  <= rst_meta;
    end // if rst
  end // always

endmodule

 

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


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

7 minutes ago, iosifk said:

Если у вас сброс приходит в ПЛИС, то вот как это делает ксайлинкс

Это гвозди от другой стенки.. :)

 

Читайте исходный пост:

On 1/31/2017 at 10:14 AM, verali said:

Хочу проверить работоспособность "железа" путем автоматического сброса - допустим после 100 клоков сигнал reset переходит из 0 в 1 и далее никак не изменяется.

 

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


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

14 minutes ago, blackfin said:

Читайте исходный пост

Это я немного криво описал ситуацию. Она не как у ТС. У меня просто была необходимость начального сброса внутренними средствами. Оказалось достаточно было определить начальное состояние регистров. До этого почему-то думал, что это будет работать только в симуляции.

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


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

6 minutes ago, RadiatoR said:

Это я немного криво описал ситуацию.

Зато узнали много нового - как звонить в домофон, как стучать в дверь, сколько времени у профессионала занимает написание SPI.. :)

Еще бы немного потерпели, и узнали бы как правильно грести на байдарке и как правильно играть в шахматы.. :)

Потом бы узнали, чем отличаются профессионалы от любителей.. :)

Да много бы чего еще узнали.. Ну, кроме ответа на свой простой вопрос.. :)

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


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

34 минуты назад, blackfin сказал:

Это гвозди от другой стенки.. :)

Да нет, я все пишу как надо. 

А надо так:

по исходному, все ресурсы ПЛИС должны быть в состоянии "сброс".

Далее, от микроконтроллера в ПЛИС должен приходить сигнал "Работа/сброс" и при старте микроконтроллера этот сигнал должен быть тоже в состоянии "сброс", это можно сделать хотя бы подпорами вывода микроконтроллера. После инициализации софта микроконтроллер должен дать сигнал "Работа", который и запустит ПЛИС в рабочий режим. А вот из ПЛИС в микроконтроллер должен приходить сигнал "ошибка", а в регистре "статуса" чтобы можно было прочесть коды ошибок. Вот тогда ПЛИС можно будет перезапустить или даже перезагрузить и устройство возобновит работу. В том модуле, что я привел, сигнал "reset" и должен приходить от микроконтроллера и потом он должен привязываться к клоку.

А если сделать вот так: 

reg [4:0] delay = 5'b0; 

то это работает только один раз при начале работы. А что будет делать устройство, если словит по SPI хотя бы один дребезг на фронте клока? "Прощай, прощай"... Выключать питание и грузить заново? Отлично, рекламации, возврат, судебный иск, увольнение - выбирайте что хотите. 

Так что не будем про "гвозди". Я эти дела проходил, результат запомнил навсегда. Он, если кто не знает, в "Записках инженера", глава о "Сбросе"...

 

 

 

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


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

5 minutes ago, iosifk said:

Далее, от микроконтроллера в ПЛИС должен приходить сигнал "Работа/сброс"...

Так и есть (будет). Но сейчас только проектируется. И чтобы не тыкать каждый раз ресет после переконфигурации я решил сделать такой подход.

Кстати, в логах я нашел следующее:

@W: FX1039 :"d:\dropbox\sources\codes\libraries\verilog\startup.v":8:1:8:6|User-specified initial value defined for instance startup.delay[4:0] is being ignored. 

тем не менее ресет работает.

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


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

On 1/31/2017 at 4:14 PM, verali said:

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

Сделайте еще один регистр, который  меняет значение после  reset, флаг того что действие было произведено. Исходный reset устанавливается только, если флаг еще не был установлен.

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


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

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

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

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

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

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

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

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

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

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