求助!求高手用Verilog或者VHDL编写一个循环寄存器
求助!求高手帮我用Verilog或者VHDL编写一个循环寄存器,我试了很多次没编好,我也是初学,普通寄存器在编写的时候移位之后剩余位都是补零啊....请高手帮忙!最后实现的功能就是例如一个256位的F89ABCDE移位后变成89ABCDEF。就是说在每个时钟周期里,将这个数的低32位移至高32位,从而实现信号逆序的目的。 下面是编写的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; reg a;
always @(posedge MCLK)
begin
a<= {a, a};
end 回复 3# eyrehua
非常感谢您!看了您的编程冒昧的问下您,可曾认识曹运合老师... 回复 2# vvt
非常感谢您!
reg a;
always @(posedge MCLK)
begin
a<= {a, a};
end
页:
[1]