qq376784106 发表于 2010-4-29 11:21:03

求助!求高手用Verilog或者VHDL编写一个循环寄存器

求助!求高手帮我用Verilog或者VHDL编写一个循环寄存器,我试了很多次没编好,我也是初学,普通寄存器在编写的时候移位之后剩余位都是补零啊....请高手帮忙!最后实现的功能就是例如一个256位的F89ABCDE移位后变成89ABCDEF。就是说在每个时钟周期里,将这个数的低32位移至高32位,从而实现信号逆序的目的。

vvt 发表于 2010-4-29 11:29:42

下面是编写的VHDL程序!!

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;


PACKAGE REG IS
    PROCEDURE SHIFTER (DIN,S:IN STD_LOGIC_VECTOR;
                     SIGNAL DOUT:OUT STD_LOGIC_VECTOR);
END REG;

PACKAGE BODY REG IS
    PROCEDURE SHIFTER (DIN,S:IN STD_LOGIC_VECTOR;
                     SIGNAL DOUT: OUT STD_LOGIC_VECTOR) IS
    VARIABLE TEMP: INTEGER;
    BEGIN
      TEMP := CONV_INTEGER(S);
      FOR I IN DIN'RANGE LOOP
            IF(TEMP+I<=DIN'LEFT) THEN
                DOUT(TEMP+I)<=DIN(I);
            ELSE
                DOUT(TEMP+I-DIN'LEFT)<=DIN(I);
            END IF;
      END LOOP;
    END SHIFTER;
END REG;


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.REG.ALL;

ENTITY SHIFTER_REG IS
    PORT (DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
         S:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
         CLK,EN:IN STD_LOGIC;
         DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SHIFTER_REG;

ARCHITECTURE a OF SHIFTER_REG IS
BEGIN
    PROCESS(CLK)
    BEGIN
      IF(CLK' EVENT AND CLK='1') THEN
            IF(EN='0') THEN
                DOUT<=DIN;
            ELSE
                SHIFTER(DIN,S,DOUT);
            END IF;
      END IF;
    END PROCESS;
END a;

eyrehua 发表于 2010-5-2 17:16:45

reg a;
always @(posedge MCLK)
begin
a<= {a, a};
end

qq376784106 发表于 2010-5-4 10:40:19

回复 3# eyrehua


    非常感谢您!看了您的编程冒昧的问下您,可曾认识曹运合老师...

qq376784106 发表于 2010-5-4 10:40:30

回复 2# vvt


    非常感谢您!

Sunlife 发表于 2015-5-19 10:16:57


reg a;
always @(posedge MCLK)
begin
a<= {a, a};
end
页: [1]
查看完整版本: 求助!求高手用Verilog或者VHDL编写一个循环寄存器