|
| ||||||||||
| Tags: 16bit, barrelshifter, vhdl |
![]() |
| | Thread Tools | Search this Thread |
|
#1
| |||
| |||
| VHDL 16-bit barrelshifter Question
shifts left, inserts zeros on the right -- realized with command sll S is a 4 bit input signal that dictates the amount of places the 16 bit signal needs to shift. I had this following code but that doesn't work thanks to the command integer(S) and sll. I tried all kinds of loops, but my java experience is probably making me do all kinds of weird things with the syntax. Please help me out! Code: LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
entity b16 IS
PORT (
DIN: in STD_LOGIC_VECTOR(15 downto 0); -- input
S: in STD_LOGIC_VECTOR (3 downto 0); -- Shift amount, 0-15
DOUT: out STD_LOGIC_VECTOR(15 downto 0) -- output
);
END b16;
architecture b16_arch of b16 is
FUNCTION shift (DIN:std_logic_vector; S:std_logic_vector) RETURN std_logic_
vector IS
VARIABLE x : std_logic_vector(15 downto 0);
BEGIN
x := DIN;
x sll integer(S);
RETURN x;
END shift;
BEGIN
DOUT <=conv(DIN,S);
END b16_arch; |
|
#2
| ||||
| ||||
| Re: VHDL 16-bit barrelshifter Question
as a newbie i think so you need to assign the value back to x,not really sure about this . like x:= x sll integer(S); just try it... |
|
#3
| |||
| |||
| Re: VHDL 16-bit barrelshifter Question
I got this error message Code: # ** Error: 16bitshift.vhd(17): Illegal type conversion from std_logic_vector to integer (array to numeric). # ** Error: 16bitshift.vhd(19): No feasible entries for infix operator "sll". # ** Error: 16bitshift.vhd(19): Bad right hand side (infix expression) in variable assignment. # ** Error: 16bitshift.vhd(23): Unknown identifier 'conv'. # ** Error: 16bitshift.vhd(24): VHDL Compiler exiting while executing this code Code: LIBRARY ieee; USE ieee.std_logic_1164.ALL; entity b16 IS PORT ( DIN: in STD_LOGIC_VECTOR(15 downto 0); -- input S: in STD_LOGIC_VECTOR (3 downto 0); -- Shift amount, 0-15 DOUT: out STD_LOGIC_VECTOR(15 downto 0) -- output ); END b16; architecture b16_arch of b16 is FUNCTION shift (DIN:std_logic_vector; S:std_logic_vector) RETURN std_logic_vector IS VARIABLE x : std_logic_vector(15 downto 0); VARIABLE y : integer range 0 to 15; BEGIN y := integer(S); x := DIN; x := x sll y; RETURN x; END shift; BEGIN DOUT <=conv(DIN,S); END b16_arch; 1. How do I convert S into an integer? 2. How do I use the operand sll properly? Doing a loop with sll in it S times? Or can I do x sll 5 for example? and how do I get the result into the variable? thanks for your reply |
|
#4
| ||||
| ||||
| Re: VHDL 16-bit barrelshifter Question Quote:
Code: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity b16 is port(din: in std_logic_vector(15 downto 0); -- input s: in std_logic_vector(3 downto 0); -- Shift amount, 0-15 dout: out std_logic_vector(15 downto 0)); end b16; architecture b16_arch of b16 is function shift (din:std_logic_vector; s:std_logic_vector) return std_logic_vector is variable x:unsigned(15 downto 0); variable y:integer range 0 to 15; begin y:=to_integer(unsigned(s)); x:=unsigned(din); x:=x sll y; return std_logic_vector(x); end shift; begin dout<=shift(din,s); end b16_arch; |
![]() |
|
| Thread Tools | Search this Thread |
| |
Similar Threads for: "VHDL 16-bit barrelshifter Question" | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Question about SanDisk sansa Clip Zip playlists question | VARIJ | Portable Devices | 8 | 27-01-2012 12:14 PM |
| Array in VHDL | Zaveri | Software Development | 5 | 12-05-2009 11:02 AM |
| Want information about VHDL and PSpice | gauriS | Education Career and Job Discussions | 2 | 17-04-2009 10:47 AM |
| Basic VHDL Questions | Keegan | Software Development | 2 | 07-11-2008 07:07 PM |
| Question with SSH | Omar | Networking & Security | 3 | 05-09-2008 01:37 PM |