Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сделать сдвигающий регистр
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
muravei
Естественно. сигналы загрузки и сдвига разные.(при активном загрузки-сдвиг запрещен)
Может есть что-то готовое, я не очень копенгаген, пока.
sazh
Есть и готовое. Скачайте с сайта Xilinx документ xst.pdf
Victor®
Цитата(muravei @ Sep 5 2006, 09:22) *
Естественно. сигналы загрузки и сдвига разные.(при активном загрузки-сдвиг запрещен)
Может есть что-то готовое, я не очень копенгаген, пока.


ftp://ftp.xilinx.com/pub/documentation/misc/examples_v8.zip
muravei
Сам придумал: инвертор, два 2и-не и Д- триггер с РС входами
Victor®
Цитата(muravei @ Sep 5 2006, 13:28) *
Сам придумал: инвертор, два 2и-не и Д- триггер с РС входами


Вот пример

Код
--
-- 8-bit Shift-Left Register with Positive-Edge Clock,
-- Asynchronous Parallel Load, Serial In, and Serial Out
--

library ieee;
use ieee.std_logic_1164.all;

entity shift_registers_6 is
    port(C, SI, ALOAD : in std_logic;
         D : in std_logic_vector(7 downto 0);
         SO : out std_logic);
end shift_registers_6;

architecture archi of shift_registers_6 is
    signal tmp: std_logic_vector(7 downto 0);
begin

    process (C, ALOAD, D)
    begin
        if (ALOAD='1') then
            tmp <= D;
        elsif (C'event and C='1') then
            tmp <= tmp(6 downto 0) & SI;
        end if;
    end process;

    SO <= tmp(7);

end archi;
Alex_xxx
Цитата(muravei @ Sep 5 2006, 09:22) *
Естественно. сигналы загрузки и сдвига разные.(при активном загрузки-сдвиг запрещен)
Может есть что-то готовое, я не очень копенгаген, пока.



Как пример могу предложить вариант модуля описаного на Verilog с паралельной загрузкой:



module shifter (clk, rst, data_in, serial_out, load);

input clk; wire clk;
input rst; wire rst;

input [7:0] data_in; wire [7:0] data_in;
input load; wire load;

output serial_out; wire serial_out;

reg [7:0] shift_reg;

assign serial_out = shift_reg[7];

always @(posedge clk)
if (!rst) begin shift_reg <= 8'b00000000; end
else if (load) begin shift_reg <= data_in; end
else
begin shift_reg[0] <= shift_reg[7]; // <= 1'b0; // dlya zapolneniya 0
shift_reg[1] <= shift_reg[0];
shift_reg[2] <= shift_reg[1];
shift_reg[3] <= shift_reg[2];
shift_reg[4] <= shift_reg[3];
shift_reg[5] <= shift_reg[4];
shift_reg[6] <= shift_reg[5];
shift_reg[7] <= shift_reg[6];
end

endmodule
PetrK
Цитата(Alex_xxx @ Sep 6 2006, 17:16) *
Как пример могу предложить вариант модуля описаного на Verilog с паралельной загрузкой:
module shifter (clk, rst, data_in, serial_out, load);

input clk; wire clk;
input rst; wire rst;

input [7:0] data_in; wire [7:0] data_in;
input load; wire load;

output serial_out; wire serial_out;

reg [7:0] shift_reg;

assign serial_out = shift_reg[7];

always @(posedge clk)
if (!rst) begin shift_reg <= 8'b00000000; end
else if (load) begin shift_reg <= data_in; end
else
begin shift_reg[0] <= shift_reg[7]; // <= 1'b0; // dlya zapolneniya 0
shift_reg[1] <= shift_reg[0];
shift_reg[2] <= shift_reg[1];
shift_reg[3] <= shift_reg[2];
shift_reg[4] <= shift_reg[3];
shift_reg[5] <= shift_reg[4];
shift_reg[6] <= shift_reg[5];
shift_reg[7] <= shift_reg[6];
end

endmodule


что-то у меня на выходе данные отсутствуют.

дело в коде, приведенном выше или я что-то делаю неправильно?
скриншот прилагается

спасибо
-=Vitaly=-
Цитата(PetrK @ Aug 19 2007, 14:59) *
что-то у меня на выходе данные отсутствуют.

дело в коде, приведенном выше или я что-то делаю неправильно?
скриншот прилагается

спасибо

У вас синхронная загрузка, можно увеличенный фрагмент симуляции, чтобы было видно сигнал LOAD??
PetrK
Цитата(-=Vitaly=- @ Aug 20 2007, 16:37) *
У вас синхронная загрузка, можно увеличенный фрагмент симуляции, чтобы было видно сигнал LOAD??


в первом скриншоте длительность LOAD 1 период клока, я пробовал его больше делать все равно на выходе всегда ноль.
muravei
Цитата(Alex_xxx @ Sep 6 2006, 17:16) *
begin shift_reg[0] <= shift_reg[7]; // <= 1'b0; // dlya zapolneniya 0

Мне кажется странной эта строчка , получается что это кольцевой регистр?
shamray
Цитата(muravei @ Aug 20 2007, 20:04) *
Мне кажется странной эта строчка , получается что это кольцевой регистр?


Да, именно колцевой. Кстати, все эти присваивания можно заменить одной строчкой
Код
shift_reg = {shift_reg[6:0],shift_reg[7]};


А не симулируется потому что активный уровень rst - 0 а не 1
Код
if (!rst) begin shift_reg <= 8'b00000000; end
-=Vitaly=-
Цитата(shamray @ Aug 20 2007, 22:04) *
Да, именно колцевой. Кстати, все эти присваивания можно заменить одной строчкой
Код
shift_reg = {shift_reg[6:0],shift_reg[7]};


А не симулируется потому что активный уровень rst - 0 а не 1
Код
if (!rst) begin shift_reg <= 8'b00000000; end


Этот парень прав на 100% cool.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.