Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: "Göran Bilski" <goran.bilski@xxxxxxxxxx>
- Date: Fri, 25 Jul 2008 09:22:56 +0200
Hi,
A pcore in EDK contains the HDL files and a set of data files.
All files are in ASCII format.
The hdl files is in pcores/<your module>_vX_XX_a/hdl/vhdl
The data files is in pcores/<your module>_vX_XX_a/data
There are two data files that you need.
First the .pao file which contains a the list of HDL files that your module
need.
It can contain reference to other pcores libraries if needed
The second is the .mpd files which contains all information XPS needs.
It contains: type of core, what bus interfaces exists, which
parameters/generics, signals,..
There is a document in the installation describing these files, the data
files is called PSF files.
When you use "Create and Import Peripheral" it creates the data files for
you.
You can also look in existing pcores to see what they contains.
The fit_timer in EDK is very simple and should give you a hint how to create
a pcore for your LCD module.
You don't need any bus interfaces, just pure signals.
Göran
"Ray D." <ray.delvecchio@xxxxxxxxx> wrote in message
news:61bf0515-e8b9-44fb-9e8f-268ca7ed6bca@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Jul 24, 2:44 am, "Göran Bilski" <goran.bil...@xxxxxxxxxx> wrote:
Hi,
You don't need the FSL_bus.
You can directly take the MicroBlaze signals FSL0_M_Data, FSL0_M_Full,
FSL0_M_Write and connect them to your module.
If you want to do this in EDK, you will need to create a pcore for your
module and manually connect these signal in XPS.
You can also make these signal external to the EDK project and connect
them
in Project Navigator.
It's depend on how your design look now.
Göran
"Ray D." <ray.delvecc...@xxxxxxxxx> wrote in message
news:0b840fac-04c0-41a6-8ca1-99593fe48018@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Jul 23, 3:26 pm, "Ray D." <ray.delvecc...@xxxxxxxxx> wrote:
On Jul 22, 2:34 am, "Göran Bilski" <goran.bil...@xxxxxxxxxx> wrote:
Hi,
Then it should be a direct match for the FSL interface.
If MicroBlaze executes a 'put' instruction , it will not write until
the
FSL_M_Full flag is '0' and when it write it will set the FSL_M Write
high
for one clock cycle.
MicroBlaze have plenty of options for the FSL instructions, you can
get
all
about them in the reference manual.
Göran
"Ray D." <ray.delvecc...@xxxxxxxxx> wrote in message
news:693f947e-929e-49f6-939d-d834e0048121@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Jul 21, 2:36 am, "Göran Bilski" <goran.bil...@xxxxxxxxxx> wrote:
Hi,
Depending a little on how your busy signals work, you might just
hook
up
your module to the FSL interface on MicroBlaze.
Your busy signal needs be high when it can't accept a new word even
when
there is no attempt to write to the module.
MicroBlaze will also just do one cycle write so your module needs to
accept
a new word in one clock cycle when busy is low.
Connect:
din(7 downto 0) -> FSL0_M_Data(24 to 31)
din_ready -> FSL0_M_Write
busy -> FSL0_M_Full
You need to enable FSL Interfaces to MicroBlaze with the parameter
C_FSL_LINKS (set it to 1)
You can write to the fsl interface with the function putfslx, you
can
read
more about this function in the document "OS and Libraries Document
Collection".
Göran
"Ray D." <ray.delvecc...@xxxxxxxxx> wrote in message
news:276dce6d-c9ed-4937-95ea-e3c86ff3656a@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Hey all,
I have a Xilinx Spartan-3E starter board, and I'm implementing a
MicroBlaze processor on the FPGA. I would also like to use the
LCD
which is on board, and I have already developed a hardware module
that
takes care of initialization and printing to the LCD. The
interface
is shown below:
entity LCD_top is
Port (
clk : in STD_LOGIC;
reset : in STD_LOGIC;
din : in STD_LOGIC_VECTOR (7 downto 0);
din_ready : in STD_LOGIC;
busy : out STD_LOGIC;
LCD_D : out STD_LOGIC_VECTOR (11 downto 8);
LCD_E : out STD_LOGIC;
LCD_RS : out STD_LOGIC;
LCD_RW : out STD_LOGIC
);
end LCD_top;
I really would like to instantiate this module along with the
processor core. My question is this - how would I go about
interfacing this with the MicroBlaze processor internal to the
FPGA?
What I would like to do is define a GPIO port on the processor to
connect to the din, din_ready and busy lines of the LCD module,
but
I
keep getting the following error:
ERROR:MDT - INST:LCD_data_status_10Bit PORT:GPIO_IO
CONNECTOR:LCD_data_status_10Bit_GPIO_IO - C:\EDK_Test_LCD
\system.mhs line 150
- connection is not connected to an external port!
MPD subproperties IOB_STATE=BUF|REG or THREE_STATE=TRUE require
that the port
be connected directly to an external port.
Is there any way to work around this? I realize I could just
connect
the LCD to the GPIO directly and write software drivers, but I'm
trying to avoid that because I already have the hardware module in
place and working smoothly. It will also be nice to have this
separate module so that it does the work of printing to the LCD,
and
the processor itself can stay busy with other more important jobs.
Also, is there an easier way to add another hardware module
without
manually editing the generated VHDL files for the core? I'm not
sure
if you can do that within Platform Studio.
Any advice would be much appreciated, thanks!
Ray
That is how the module works so I'll have to try some of these
options! The busy signal is set high the entire time data is being
written to the LCD. Originally I had a module "program.vhd" that
controlled the LCD module along with a keyboard module that we we had
in place for user input. Within program.vhd, I implement a state
machine and check if the busy signal is high before writing to the
LCD. If busy = 0, then I set din_ready high and set the 8-bits of
data. This is buffered within the LCD module and you only need to
hold din_ready for a single cycle to write to the LCD. The LCD is
connected over a 4-bit interface to the FPGA and this is taken care of
within the LCD module. When the writing operation begins busy is set
to '1' until complete.
Ray
OK - I'm new to using the EDK and am having trouble implementing this
with the FSL bus. I have a few questions:
1) When I create a custom peripheral, it generates an HDL wrapper - Do
I simply edit this wrapper by instantiating my LCD_top module as a
component within the top level design?
2) Should I check the box "Generate template driver files to help you
implement software interface", or will the provided functions to read
and write to the FSL bus suffice?
3) Do you know of any good tutorials on how to implement a custom
peripheral on the FSL bus? I've come across a few for adding
peripherals to the other buses, but most that I have found do not
follow through with how to edit the VHDL files and correctly add the
peripheral to the system in Platform Studio (they simply tell you go
to 'Create/Import Custom Peripheral').
Any help/input is appreciated, thanks!
Ray
Two more things -
1) the four output ports of the LCD module must be connected to the
external FPGA pins in order to drive the LCD. What is the best way to
go about doing this? Is this something that can be edited within
Platform Studio or do I need to manually edit VHDL/UCF files? I'm
assuming I will have to add the outputs to the interface shown below.
2) When I choose the master interface for the FSL bus, the ports are
defined as follows:
-- DO NOT EDIT BELOW THIS LINE ---------------------
-- Bus protocol ports, do not add or delete.
FSL_Clk : in std_logic;
FSL_Rst : in std_logic;
FSL_S_Clk : out std_logic;
FSL_S_Read : out std_logic;
FSL_S_Data : in std_logic_vector(0 to 31);
FSL_S_Control : in std_logic;
FSL_S_Exists : in std_logic;
FSL_M_Clk : out std_logic;
FSL_M_Write : out std_logic;
FSL_M_Data : out std_logic_vector(0 to 31);
FSL_M_Control : out std_logic;
FSL_M_Full : in std_logic
-- DO NOT EDIT ABOVE THIS LINE ---------------------
You mention that my din(7 downto 0) port should be connected to the
FSL_M_Data port, but the former is an input while the latter is an
output. Am I missing something? I tried to define this as a slave
interface, but that also yields an error when I try to generate the
bitstream.
Thanks.
I think I understand what you are saying, but I'm still unsure of how
to implement it. I went through the 'Create and Import Peripheral'
wizard to create the pcore and HDL wrapper file, but when you go
through this it asks which bus you wish to attach the peripheral to -
this generated HDL file is an interface file for the FSL bus,
correct? I assumed I needed to edit this file and place my LCD module
within this interface file (with the interface shown in my previous
message). Do I need to go through this wizard to directly connect to
the FSL interface or is this the incorrect method?
When you say directly take the MicroBlaze signal and connect them to
my module, do you mean edit the aforementioned wrapper file for the
pcore, or is there an alternative way? Is there a top level VHD file
that I need to edit in order to port the LCD module output to the
external FPGA pins?
I realize these probably are simple questions but since I've never
been through this process within the EDK (and can't find any good
tutorials - most deal with adding peripheral to OPB or PLB bus), I'm
having a hard time figuring out which steps I need to take in order to
accomplish what you have suggested.
Anyway, I really do appreciate all your help so far. Thank you!
Ray
.
- Follow-Ups:
- References:
- Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Ray D.
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Göran Bilski
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Ray D.
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Göran Bilski
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Ray D.
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Ray D.
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Göran Bilski
- Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- From: Ray D.
- Additional Hardware Module with Xilinx MicroBlaze Processor
- Prev by Date: Re: Xilinx FFT core's IFFT function not working? Dun Xilinx TEST their cores before releasing them?
- Next by Date: Re: SD Card Controller
- Previous by thread: Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- Next by thread: Re: Additional Hardware Module with Xilinx MicroBlaze Processor
- Index(es):
Relevant Pages
|