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

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

Сообщение MIX@ » 04 дек 2009, 01:12

Доброго времени суток!

Мой синтезируемый вариант примера с задержкой. (с лекции 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


Диаграмма
Вложения
delay_wave.JPG
Диаграмма
delay_wave.JPG (20.81 Кб) Просмотров: 9977
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

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

Сообщение sash » 05 дек 2009, 13:08

Отлично! минус вопрос в билете на экзамене!
То есть, Вы можете не отвечать на один из вопросов билета. Но если Вы на него ответите, это лишь повысит Вашу оценку.
sash
 
Сообщения: 90
Зарегистрирован: 28 фев 2009, 20:56

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

Сообщение OYTIS » 08 дек 2009, 17:04

Мой вариант (Герасимов А.А.):

Код: Выделить всё
//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
Вложения
beeber_rtl.jpg
RTL-схема
beeber_rtl.jpg (96.11 Кб) Просмотров: 9920
beeper_sim.JPG
Результаты моделирования
beeper_sim.JPG (32.54 Кб) Просмотров: 9940
Последний раз редактировалось OYTIS 09 дек 2009, 03:50, всего редактировалось 1 раз.
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

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

Сообщение sash » 08 дек 2009, 18:45

А Вас я, кажется, просил приложить еще схему RTL. Это можно сделать в Quartus (RTL viewer) или в ISE.
sash
 
Сообщения: 90
Зарегистрирован: 28 фев 2009, 20:56

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

Сообщение sash » 08 дек 2009, 18:50

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

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

Сообщение idoru » 08 дек 2009, 21:21

Мой вариант (Прокуров Илья, гр. 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 Кб) Просмотров: 9930

Схема RTL:
Вложения
RTL.JPG
RTL.JPG (26.81 Кб) Просмотров: 9930
idoru
 
Сообщения: 18
Зарегистрирован: 09 ноя 2008, 08:51

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

Сообщение OYTIS » 09 дек 2009, 03:51

Ммм... Да точно, так все и было.
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

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

Сообщение sash » 09 дек 2009, 13:13

idoru писал(а):Мой вариант (Прокуров Илья, гр. 5113).

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

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

У Антона это больше похоже на синхронный сброс, хотя на схеме он изображен как обычно изображают асинхронный. Надо разобраться, что значат у него на схеме компоненты fdre и fdrse.
sash
 
Сообщения: 90
Зарегистрирован: 28 фев 2009, 20:56

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

Сообщение OYTIS » 09 дек 2009, 15:58

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
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

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

Сообщение idoru » 09 дек 2009, 19:50

sash писал(а):А Вы схемку не могли бы немного увеличить?

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

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

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

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

Мы тоже этого хотим! :D Тем более, что Миха (первый отписавшийся) на самом деле сделал не совсем то, что требовалось :evil: :D .
Вложения
RTL.JPG
RTL.JPG (103.34 Кб) Просмотров: 9896
idoru
 
Сообщения: 18
Зарегистрирован: 09 ноя 2008, 08:51

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

Сообщение OYTIS » 10 дек 2009, 02:10

А ты не ябедничай =)
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

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

Сообщение idoru » 10 дек 2009, 02:30

OYTIS писал(а):А ты не ябедничай =)

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

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

Сообщение OYTIS » 10 дек 2009, 02:55

Это почему это я "где-то рядом" ? :x
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

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

Сообщение idoru » 10 дек 2009, 03:17

OYTIS писал(а):Это почему это я "где-то рядом" ? :x

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

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

Сообщение sash » 12 дек 2009, 10:18

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;


А что с Ряховским? Он не хочет отличиться?
sash
 
Сообщения: 90
Зарегистрирован: 28 фев 2009, 20:56

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

Сообщение idoru » 12 дек 2009, 18:07

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

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

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

Он куда-то пропал. Его совсем не видно.
idoru
 
Сообщения: 18
Зарегистрирован: 09 ноя 2008, 08:51


Вернуться в Организация и проектирование встроенных вычислительных систем

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron