Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_latypov_gotovie!!!.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.05 Mб
Скачать
  1. Реализация мультиплексоров

Другим часто используемым устройством является мультиплексор (Multiplexors).

Как правило, для построения мультиплексора удобно использовать оператор Case. Оператор case обеспечивает параллельную обработку. Оператор выбора case (case statement) используется для выбора одного варианта из нескольких в зависимости от условий.

Средства синтеза с Verilog поддерживают приоритет в выполнении оператора case и в ряде случаев необходимо ввести специфические инструкции в код и для того, чтобы оператор выбора не имел приоритета

Рис.6.13 Мультиплексор 4 в 1

Пример описания на Verilog

 

//4:1 Multiplexor

module MUX (C, D, E, F, S, MUX_OUT);

input C, D, E, F;

input [1:0] S;

output MUX_OUT;

reg MUX_OUT;

always @(C or or or or S)

begin

case (S)

2'b00 : MUX_OUT = C;

2'b01 : MUX_OUT = D;

2'b10 : MUX_OUT = E;

default : MUX_OUT = F;

endcase

end

endmodule

  1. Реализация счетчиков (модули счета, пропуск состояний)

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

Рассмотрим пример построения 8 разрядного счетчика, считающего в прямом направлении и имеющего цепи разрешения счета и асинхронного сброса.

Пример на Verilog 

module count_en (en, clock, reset, out);

parameter Width = 8;

input clock,reset, en;

output [Width-1:0] out;

reg [Width-1:0] out;

always @(posedge clock or negedge reset)

if(!reset)

out = 8'b0;

else if(en)

out =out +1;

endmodule

Рассмотрим счетчик с модулем счета М=6..

module mod_counter(     input wire reset,     input wire clock,     input wire [3:0]in,     input wire load,     output reg [3:0]cnt     ); parameter MODULE = 6; always @(posedge clock or posedge reset) begin   if(reset)     cnt <= 4'b0000;   else   begin   if(load)     cnt <= in;   else     if(cnt+1==MODULE)        cnt <= 4'b0000;     else        cnt <= cnt + 1'b1;   end end endmodule

  1. Реализация регистров (обычных, сдвиговых)

Реализация различных видов регистров:

Далее рассмотрим защелки на основе D-триггеров (D-Latches)

Защелка с разрешением выхода (D-Latch with Data and Enable)

 Описание на Verilog

module d_latch (enable, data, y);

input enable, data;

output y;

reg y;

always @(enable or data)

if (enable)

y = data;

endmodule

Реализация сдвигового регистра.

module simple_shift (      operandA, operandB,      out_shl, out_shr, out_sar);

// два входных 8-ми битных операнда input [7:0] operandA, operandB;

// Выходы для операций сдвига output [15:0] out_shl; output [7:0]  out_shr; output [7:0]  out_sar;

//логический сдвиг влево assign out_shl = operandA << operandB; // пример: на сколько сдвигать определяется 3-мя битами второго операнда assign out_shr = operandA >> operandB[2:0];

//арифметический сдвиг вправо (сохранение знака числа) assign out_sar = operandA >>> operandB[2:0];   endmodule

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]