- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi all. Im doing a final year project and I to make things easier I need to make a custom library with functions. How do I make my own library? I tried a bunch of things like adding my own vhdl file into the quartus installation directory library folders. No luck there.
I have a function but I cant put it into my main entity file or its architecture. If I do and I call it I get a synthesis error saying that the <function name> object is used but not declared. I am thinking this has to do with the function not being declared (as in C). Basically I have this function defined. It compiles. But what is wrong here? Do I need to make my own library for this VHDL function or do I need to declare it at the top of the file? ThanksLink Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You have to put your function in a package and add the package text to the list of project files. By default, the package is compiled to the library work. You can specify a different library target in different ways, e.g. by an assignment or a synthesis directive in the source. Consult the Quartus software manual about design libraries.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This is how you declare and use packages:
package my_function_package is
--put constants here
--put function/procedure declarations here - note: this is not the entire function
function do_stuff return something;
end package my_functions_package;
--the body is where you put all the function code
package body my_function_package is
--this is where the code actually goes
function do_stuff return something is
begin
--do stuff
end function do_stuff;
end package body my_function_package;
--then in the file you want to use the function
--unless you have specified my_library, replace it with work
library my_library; --not needed if library is work
use my_library.my_function_package.all;
You can also put functions directly into architectures or processes. You just define them before the "begin":
architecture rtl of some_entity is
--function goes here
begin
process(clk)
--function goes here, you can also declare constants and variables here
begin
--something
end process;
end architecture rtl;

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page