Страница 1 из 1

Задачи с лекции

СообщениеДобавлено: 04 дек 2009, 01:12
MIX@
Доброго времени суток!

Мой синтезируемый вариант примера с задержкой. (с лекции 3.12.09)

Код: Выделить всё
module delay(
   input wire clk,rst,request,
   output wire q
   );

localparam delay_time = 5;

reg [2:0] counter;
wire full_time = counter == delay_time;
always @(posedge clk or negedge rst)
   if (!rst) counter <= delay_time;
   else if (request) counter <= 'b0;
   else if (!full_time) counter <= counter + 1;
   else counter <= counter;

assign q = (full_time) ? 1'b0 : 1'b1;

endmodule



Testbench
Код: Выделить всё
module delay_tb;

   // Inputs
   reg clk;
   reg rst;
   reg request;

   // Outputs
   wire q;

   // Instantiate the Unit Under Test (UUT)
   delay uut (
      .clk(clk),
      .rst(rst),
      .request(request),
      .q(q)
   );

   initial begin
      // Initialize Inputs
      clk = 0;
      rst = 0;
      request = 0;

   #1 rst = 1'b1;

   #1 request = 1'b1;
   #2 request = 1'b0;
   
   #11 request = 1'b1;
   #1 request = 1'b0;
   #2 request = 1'b1;
   #2 request = 1'b0;
   #10 $finish;

   end
   
   initial forever #1 clk <= ~clk;
     
endmodule


Диаграмма

Re: Задачи с лекции

СообщениеДобавлено: 05 дек 2009, 13:08
sash
Отлично! минус вопрос в билете на экзамене!
То есть, Вы можете не отвечать на один из вопросов билета. Но если Вы на него ответите, это лишь повысит Вашу оценку.

Re: Задачи с лекции

СообщениеДобавлено: 08 дек 2009, 17:04
OYTIS
Мой вариант (Герасимов А.А.):

Код: Выделить всё
//beeper.v

module beeper(
    Req,
    Out,
    Clk,
    Rst
    );
    parameter T_COUNT = 10;
    parameter W_COUNT = 4;
   
    input wire Req;
    output reg Out;
    input wire Clk;
    input wire Rst;
   
    reg r;
    reg [W_COUNT-1:0] count;
   
    always @(posedge Clk)
    begin
      if (Rst)
      begin
        r <= 0;
        Out <= 0;
        count <= 0;
      end
      else if (Req & !r)
      begin
        count <= T_COUNT;
        Out <= 1;
        r <= 1;
      end
      else
      begin
        if(count == 0)
          Out <= 0;
        else
          count <= count-1;
      end
      if(!Req)
        r <= 0;
    end
endmodule


Код: Выделить всё
//testbench.v
module testbench;
   reg Req;
   reg Clk;
   reg Rst;
   wire Out;

   beeper uut (
      .Req(Req),
      .Out(Out),
      .Clk(Clk),
      .Rst(Rst)
   );

   initial begin
     Req = 0;
     Clk = 0;
     Rst = 1;
    
      #55 Rst = 0;
      #20 Req = 1;
      #10 Req = 0;
      #150;
      Req = 1;
      #10 Req = 0;
      #50 Req = 1;
      #10 Req = 0;
      #150;
      Req = 1;
      #200 Req = 0;
      #50 $stop;
   end
   
    always
      #5 Clk = ~Clk;
endmodule

Re: Задачи с лекции

СообщениеДобавлено: 08 дек 2009, 18:45
sash
А Вас я, кажется, просил приложить еще схему RTL. Это можно сделать в Quartus (RTL viewer) или в ISE.

Re: Задачи с лекции

СообщениеДобавлено: 08 дек 2009, 18:50
sash
Просьба к господам Прокурову, Ряховскому и Герасимову: выхожите, пожалуйста, свои решения (Герасимов это уже сделал) и приложите к ним схемы RTL-уровня, которые получились в результате синтеза устройства. Результаты моделирования прилагать не обязательно.

Re: Задачи с лекции

СообщениеДобавлено: 08 дек 2009, 21:21
idoru
Мой вариант (Прокуров Илья, гр. 5113). Он несколько отличается от предложенного Вам в четверг после лекции, так как тот вариант не синтезировался. Отличие не принципиальное; если нужно, могу выложить исходный вариант и ошибку, которую выдавал синтезатор. Плюс добавлен сигнал асинхронного сброса (не знаю нужно это было или нет - все делают, и я сделал :) ). В принципе, мой вариант очень похож на вариант Антона Герасимова, но могу заявить под присягой, что плагиатом я не занимался :D .

Генератор:
Код: Выделить всё
module pulse_generator(input clk, request, rst, output reg q);

parameter pulse_width = 5;

reg [7:0] cnt;
reg prevReq;

always @(posedge clk, posedge rst)
begin
   if (rst == 1) q <= 0;
   else if ((prevReq == 0) && (request == 1))
      begin
         q <= 1;
         prevReq <= 1;
         cnt <= 1;
      end
   else
      begin
         if (request == 0) prevReq <= 0;
         if (cnt < pulse_width) cnt <= cnt + 1;
         else q <= 0;
      end
end
endmodule


Тэстбэнч:
Код: Выделить всё
module testbench;

reg clk, req, rst;
wire q;

initial
begin
   clk = 0;
   req = 0;
   rst = 0;
end

pulse_generator pg(clk, req, rst, q);

always #1 clk = ~clk;

initial
begin
   #2;
   rst = 1;
   #2;
   rst = 0;
   req = 1;
   #4;
   req = 0;
   #8;
   req = 1;
   #4;
   req = 0;
   rst = 1;
   #2;
   rst = 0;
   #2;
   req = 1;
   #4;
   req = 0;
   #2;
   req = 1;
   #14 $stop;
end
endmodule


Симуляция (на всякий случай):
simulation.JPG
simulation.JPG (19.18 Кб) Просмотров: 10097

Схема RTL:

Re: Задачи с лекции

СообщениеДобавлено: 09 дек 2009, 03:51
OYTIS
Ммм... Да точно, так все и было.

Re: Задачи с лекции

СообщениеДобавлено: 09 дек 2009, 13:13
sash
idoru писал(а):Мой вариант (Прокуров Илья, гр. 5113).

А Вы схемку не могли бы немного увеличить? А то лупа при просмотре в таком разрешении не помогает. Спасибо.

idoru писал(а):добавлен сигнал асинхронного сброса (не знаю нужно это было или нет - все делают, и я сделал :) )

У Антона это больше похоже на синхронный сброс, хотя на схеме он изображен как обычно изображают асинхронный. Надо разобраться, что значат у него на схеме компоненты fdre и fdrse.

Re: Задачи с лекции

СообщениеДобавлено: 09 дек 2009, 15:58
OYTIS
FDRE is a single D-type flip-flop with data (D), clock enable (CE), and synchronous reset (R) inputs and data output (Q).

FDRSE is a single D-type flip-flop with synchronous reset (R), synchronous set (S), and clock enable (CE) inputs and data output (Q).


http://www.xilinx.com/itp/xilinx5/data/ ... 2_156.html
http://www.xilinx.com/itp/xilinx5/data/ ... 6_160.html

Re: Задачи с лекции

СообщениеДобавлено: 09 дек 2009, 19:50
idoru
sash писал(а):А Вы схемку не могли бы немного увеличить?

Без проблем. Я просто не подумал сразу, что Вы будете в ней копаться :oops: . Думал, важен сам факт наличия некоторой синтезированной схемы :angel: :D .

sash писал(а):
idoru писал(а):добавлен сигнал асинхронного сброса (не знаю нужно это было или нет - все делают, и я сделал :) )
У Антона это больше похоже на синхронный сброс

Это безусловно. Я имел ввиду, что был добавлен сам сигнал сброса как таковой (изначально у меня его не было) - увидел, что все его делают, и прикрутил к своему варианту тоже, сделав асинхронным. А у Антона он конечно синхронный - в его схему я особо не всматривался, но из описания на Verilog это очевидно.

sash писал(а):Отлично! минус вопрос в билете на экзамене!
То есть, Вы можете не отвечать на один из вопросов билета. Но если Вы на него ответите, это лишь повысит Вашу оценку.

Мы тоже этого хотим! :D Тем более, что Миха (первый отписавшийся) на самом деле сделал не совсем то, что требовалось :evil: :D .

Re: Задачи с лекции

СообщениеДобавлено: 10 дек 2009, 02:10
OYTIS
А ты не ябедничай =)

Re: Задачи с лекции

СообщениеДобавлено: 10 дек 2009, 02:30
idoru
OYTIS писал(а):А ты не ябедничай =)

:oops: :) . На самом деле среди нас всех Миха больше всего заслуживает бонус просто, не знаю, "по умолчанию" что-ли, a priori :) . На данный момент он знает больше всех; ну может ты где-то рядом ещё. Я думаю, он просто задание немного не так понял. Я ж не прошу у него бонус отобрать, я просто тоже хочу "минус вопрос", мало ли пригодится :) .

Re: Задачи с лекции

СообщениеДобавлено: 10 дек 2009, 02:55
OYTIS
Это почему это я "где-то рядом" ? :x

Re: Задачи с лекции

СообщениеДобавлено: 10 дек 2009, 03:17
idoru
OYTIS писал(а):Это почему это я "где-то рядом" ? :x

:lol: Не сердитесь, о, Всемогущий! :) Это же всего-лишь моё субъективное мнение на текущий момент. :D Я к вам обоим залезть в мозг и сравнить знания не могу. :) Но мы можем устроить между вами поединок за звание Чемпиона 5-го курса по Verilog в первом полусреднем весе. :)

Re: Задачи с лекции

СообщениеДобавлено: 12 дек 2009, 10:18
sash
idoru писал(а):Мы тоже этого хотим! :D Тем более, что Миха (первый отписавшийся) на самом деле сделал не совсем то, что требовалось :evil: :D .

Господа Герасимов и Прокуров получают минус вопрос в билете на экзамене.

Михаил сделал все правильно: генератор импульса выдает единицу, пока есть запрос. Просто схему фиксации запроса он не внес в сам генератор, а оставил на усмотрение читателя. Я при выдаче задания говорил, что событие запроса может быть представлено как угодно. Если это положительный перепад, то схема тривиальна:
Код: Выделить всё
wire Rq; // Линия запроса
reg prev_rq; // Значение Rq на предыдущем такте
wire request_event = Rq & ~prev_rq; // Поступил запрос

always @(posedge Clk, posedge Rst)
    if(Rst)
        prev_rq <= 0;
    else
        prev_rq <= Rq;


А что с Ряховским? Он не хочет отличиться?

Re: Задачи с лекции

СообщениеДобавлено: 12 дек 2009, 18:07
idoru
sash писал(а):Господа Герасимов и Прокуров получают минус вопрос в билете на экзамене.

:Yahoo!: Спасибо!
sash писал(а):Михаил сделал все правильно: генератор импульса выдает единицу, пока есть запрос.

Ну тогда всё отлично! Значит, это я немного не так понял задание (мне казалось, что событием запроса обязательно должен быть положительный перепад на линии request), прошу прощения. :oops:
sash писал(а):А что с Ряховским? Он не хочет отличиться?

Он куда-то пропал. Его совсем не видно.