Jump to content

    
verali

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

Recommended Posts

4 minutes ago, MrGalaxy said:

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

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

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

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

Share this post


Link to post
Share on other sites
4 minutes ago, RadiatoR said:

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

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

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

 

Share this post


Link to post
Share on other sites
4 minutes ago, iosifk said:

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

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

8 minutes ago, iosifk said:

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

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

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites
7 minutes ago, iosifk said:

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

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

 

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

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

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

 

Share this post


Link to post
Share on other sites
14 minutes ago, blackfin said:

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

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

Share this post


Link to post
Share on other sites
6 minutes ago, RadiatoR said:

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

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

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

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

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

Share this post


Link to post
Share on other sites
34 минуты назад, blackfin сказал:

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

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

А надо так:

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

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

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

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

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

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

 

 

 

Share this post


Link to post
Share on other sites
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. 

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

Share this post


Link to post
Share on other sites
On 1/31/2017 at 4:14 PM, verali said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.