Go Back   Velocity Reviews > Newsgroups > VHDL
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply

VHDL - Simple ALU Implementation

 
Thread Tools Search this Thread
Old 11-13-2008, 08:50 PM   #1
Default Simple ALU Implementation


Hi guys,
I have to implement a simple ALU of a 32bit mips..I have already
implemented many submodules (adder,multipliers,shifter...) ,that I
have to instantiate in the top level module "ALU_TOP". This module
receives as input 2 op. (a , b) and a 6bit signal OPCODE on which
basis the differents modules are instantiates.

My problem is checking the signal OPCODE directly in the architecture
(not in a process , and after begin of arch.). I used that solution
because using a process returned me errors reusing the components (and
portamaps...)
But now I cannot even check the OPCODE ("If not allowed..")..(I double
checked parenthesis or typos..)...

what should I do? Do I have to use a process? But how to use different
modules within a process?

I paste the simple part of the code .. and this not work..
Code:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity alu_top is


Generic (N:integer:=32);

Port ( A : in STD_LOGIC_VECTOR(N-1 downto 0);
B : in STD_LOGIC_VECTOR(N-1 downto 0);
OPCODE : in STD_LOGIC_VECTOR(5 downto 0);
FUNCT : in STD_LOGIC_VECTOR(5 downto 0);
COND : out STD_LOGIC;
ALUOut : out STD_LOGIC_VECTOR(N-1 downto 0)
);
end alu_top;

architecture Behavioral of alu_top is

component multiplier_s_u is

generic(N:integer:=16);

Port ( A : in STD_LOGIC_VECTOR(N-1 downto 0);
B : in STD_LOGIC_VECTOR(N-1 downto 0);
SIGN : in STD_LOGIC;--signed/unsigned selector
M : out STD_LOGIC_VECTOR((2*N)-1 downto 0));--output da 32
bit
end component multiplier_s_u;


begin

if OPCODE="000000" then
cond<='0';

end if;

end Behavioral;

---
ERROR:HDLParsers:164 - "F:/Poli/SDSS/MyProjects/MIPS/alu_top.vhd" Line
50. parse error, unexpected IF

Thanks in advance


andrezz
  Reply With Quote
Old 11-13-2008, 09:30 PM   #2
Dave
 
Posts: n/a
Default Re: Simple ALU Implementation
On Nov 13, 3:50*pm, andrezz <bugp...@gmail.com> wrote:
> Hi guys,
> I have to implement a simple ALU of a 32bit mips..I have already
> implemented many submodules (adder,multipliers,shifter...) ,that I
> have to instantiate in the top level module "ALU_TOP". This module
> receives as input 2 op. (a , b) and a 6bit signal OPCODE on which
> basis the differents modules are instantiates.
>
> My problem is checking the signal OPCODE directly in the architecture
> (not in a process , and after begin of arch.). I used that solution
> because using a process returned me errors reusing the components (and
> portamaps...)
> But now I cannot even check the OPCODE ("If not allowed..")..(I double
> checked parenthesis or typos..)...
>
> what should I do? Do I have to use a process? But how to use different
> modules within a process?
>
> I paste the simple part of the code .. and this not work..
> Code:
>
> library IEEE;
> use IEEE.STD_LOGIC_1164.ALL;
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;
>
> entity alu_top is
>
> * * * * Generic (N:integer:=32);
>
> * * Port ( A : in *STD_LOGIC_VECTOR(N-1 downto 0);
> * * * * * *B : in *STD_LOGIC_VECTOR(N-1 downto 0);
> * * * * * *OPCODE : in *STD_LOGIC_VECTOR(5 downto 0);
> * * * * * *FUNCT : in *STD_LOGIC_VECTOR(5 downto 0);
> * * * * * *COND : out *STD_LOGIC;
> * * * * * *ALUOut : out *STD_LOGIC_VECTOR(N-1 downto 0)
> * * * * * * * * * * * * * );
> end alu_top;
>
> architecture Behavioral of alu_top is
>
> component multiplier_s_u is
>
> * * * * *generic(N:integer:=16);
>
> * * Port ( A : in *STD_LOGIC_VECTOR(N-1 downto 0);
> * * * * * *B : in *STD_LOGIC_VECTOR(N-1 downto 0);
> * * * * * *SIGN : in *STD_LOGIC;--signed/unsigned selector
> * * * * * *M : out *STD_LOGIC_VECTOR((2*N)-1 downto 0));--output da 32
> bit
> end component multiplier_s_u;
>
> begin
>
> if OPCODE="000000" *then
> cond<='0';
>
> end if;
>
> end Behavioral;
>
> ---
> ERROR:HDLParsers:164 - "F:/Poli/SDSS/MyProjects/MIPS/alu_top.vhd" Line
> 50. parse error, unexpected IF
>
> Thanks in advance


The if-then-else structure must be used inside of a process. It may
not be used in the concurrent section of the architecture.

Dave


Dave
  Reply With Quote
Old 11-13-2008, 11:57 PM   #3
kennheinrich@sympatico.ca
 
Posts: n/a
Default Re: Simple ALU Implementation
On Nov 13, 4:30*pm, Dave <dhsch...@gmail.com> wrote:
> On Nov 13, 3:50*pm, andrezz <bugp...@gmail.com> wrote:
>
>
>
> > Hi guys,
> > I have to implement a simple ALU of a 32bit mips..I have already
> > implemented many submodules (adder,multipliers,shifter...) ,that I
> > have to instantiate in the top level module "ALU_TOP". This module
> > receives as input 2 op. (a , b) and a 6bit signal OPCODE on which
> > basis the differents modules are instantiates.

>
> > My problem is checking the signal OPCODE directly in the architecture
> > (not in a process , and after begin of arch.). I used that solution
> > because using a process returned me errors reusing the components (and
> > portamaps...)
> > But now I cannot even check the OPCODE ("If not allowed..")..(I double
> > checked parenthesis or typos..)...

>
> > what should I do? Do I have to use a process? But how to use different
> > modules within a process?

>
> > I paste the simple part of the code .. and this not work..
> > Code:

>
> > library IEEE;
> > use IEEE.STD_LOGIC_1164.ALL;
> > use IEEE.STD_LOGIC_ARITH.ALL;
> > use IEEE.STD_LOGIC_UNSIGNED.ALL;

>
> > entity alu_top is

>
> > * * * * Generic (N:integer:=32);

>
> > * * Port ( A : in *STD_LOGIC_VECTOR(N-1 downto 0);
> > * * * * * *B : in *STD_LOGIC_VECTOR(N-1 downto 0);
> > * * * * * *OPCODE : in *STD_LOGIC_VECTOR(5 downto 0);
> > * * * * * *FUNCT : in *STD_LOGIC_VECTOR(5 downto 0);
> > * * * * * *COND : out *STD_LOGIC;
> > * * * * * *ALUOut : out *STD_LOGIC_VECTOR(N-1 downto 0)
> > * * * * * * * * * * * * * );
> > end alu_top;

>
> > architecture Behavioral of alu_top is

>
> > component multiplier_s_u is

>
> > * * * * *generic(N:integer:=16);

>
> > * * Port ( A : in *STD_LOGIC_VECTOR(N-1 downto 0);
> > * * * * * *B : in *STD_LOGIC_VECTOR(N-1 downto 0);
> > * * * * * *SIGN : in *STD_LOGIC;--signed/unsigned selector
> > * * * * * *M : out *STD_LOGIC_VECTOR((2*N)-1 downto 0));--output da 32
> > bit
> > end component multiplier_s_u;

>
> > begin

>
> > if OPCODE="000000" *then
> > cond<='0';

>
> > end if;

>
> > end Behavioral;

>
> > ---
> > ERROR:HDLParsers:164 - "F:/Poli/SDSS/MyProjects/MIPS/alu_top.vhd" Line
> > 50. parse error, unexpected IF

>
> > Thanks in advance

>
> The if-then-else structure must be used inside of a process. It may
> not be used in the concurrent section of the architecture.
>
> Dave


If you want to do something like this outside a process, use a
concurrent signal assignment structured as a selected signal
assignment or conditional signal assignment(Google these terms). This
only lets you assign to one signal, though.

Example:

cond <=
'0' when OPCODE = "000000" else
'1' when OPCODE = "111111" else
'X';

or the other form is

with OPCODE select cond <=
'0' when "000000" ,
'1' when "11111",
'X' when others;

These are merely shorthands for writing the equivalent sequential if-
statement or case-statement inside a new process. (In VHDL, everything
you find in an architecture body is just a shorthand for either a
process or a block.)

But more fundamentally, step back a minute and get clear on the
difference between parallel and sequential descriptions VHDL. Reread
your reference book and try to see how the examples are constructed,
and where the right place is to implement the various bits. Put the
components ("old" logic) in the architecture body, and connect them
with signals. When you need to do something other than just using a
signal as a dumb connection between a few ports, use a process to
describe the "new" logic you want (like a state machine). Or for very
simple logic, just use a signal assignment. For example: chip_select
<= (addr = "0000") and ((read = '0') or (write = '0'));

- Kenn


kennheinrich@sympatico.ca
  Reply With Quote
Old 11-14-2008, 04:02 PM   #4
andrew_ross
Junior Member
 
Join Date: Nov 2008
Posts: 6
Default
thanks everybody and sorry..I have not studied so much in effect..

My answer is : how should I implement the design of the alu..
the ipotetic if-then-elsif--.. are due to 2 inputsignals at the same time..OPCODE(6BIT) , FUNCT(6 BIT). (on which base I should call components..)

but - I cannot use processes to generate components
but - at the same time - I should use processes to check input signals

thanks..


andrew_ross
andrew_ross is offline   Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
New releases: We Are Marshall, Serenity Collectors Edition & 8 Simple Rules: Updated complete downloadable R1 DVD DB & info lists Doug MacLean DVD Video 0 05-15-2007 05:54 AM
Simple video editor? trs80 DVD Video 7 04-10-2007 05:14 PM
Simple region code question... simple answer?? joseph.greer@gmail.com DVD Video 7 01-26-2007 09:07 PM
simple unattended backup utilites? du ah A+ Certification 0 03-05-2005 09:01 AM
DVD Verdict reviews: DIE! DIE! MY DARLING!, LOOK! PLAYFUL PATTERNS AND SIMPLE SHAPES / GO! EXERCISE WITH THE TELETUBBIES, and more! DVD Verdict DVD Video 0 09-26-2003 10:02 AM




SEO by vBSEO 3.3.2 ©2009, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46