- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello guys i a trying to implement a keccak hash algorithm.I got the following error message
Error (10481): VHDL Use Clause error at keccak.vhd(213): design library "ieee" does not contain primary unit "std_logic_textio"Error (10800): VHDL error at keccak.vhd(213): selected name in use clause is not an expanded name I am not very good at vhdl i am still practicing.Please can someone help and tell me where the problem is?-- The Keccak sponge function, designed by Guido Bertoni, Joan Daemen,-- Michaлl Peeters and Gilles Van Assche. For more information, feedback or
-- questions, please refer to our website: http://keccak.noekeon.org/
-- Implementation by the designers,
-- hereby denoted as "the implementer".
-- To the extent possible under law, the implementer has waived all copyright
-- and related or neighboring rights to the source code in this file.
-- http://creativecommons.org/publicdomain/zero/1.0/
library work;
use work.keccak_globals.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
library STD;
use STD.textio.all;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_misc.all;
use IEEE.std_logic_arith.all;
library work;
package keccak_globals is
constant num_plane : integer := 5;
constant num_sheet : integer := 5;
constant logD : integer :=4;
constant N : integer := 64;
--types
type k_lane is array ((N-1) downto 0) of std_logic;
type k_plane is array ((num_sheet-1) downto 0) of k_lane;
type k_state is array ((num_plane-1) downto 0) of k_plane;
end package;
library work;
use work.keccak_globals.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity keccak_buffer is
port (
clk : in std_logic;
rst_n : in std_logic;
din_buffer_in : in std_logic_vector(63 downto 0);
din_buffer_in_valid: in std_logic;
last_block: in std_logic;
din_buffer_full : out std_logic;
din_buffer_out : out std_logic_vector(1023 downto 0);
dout_buffer_in : in std_logic_vector(255 downto 0);
dout_buffer_out: out std_logic_vector(63 downto 0);
dout_buffer_out_valid: out std_logic;
ready: in std_logic);
end keccak_buffer;
architecture rtl of keccak_buffer is
--components
----------------------------------------------------------------------------
-- Internal signal declarations
----------------------------------------------------------------------------
signal mode, buffer_full: std_logic; --mode=0 input mode/ mode=1 output mode
signal count_in_words : unsigned(4 downto 0);
signal buffer_data: std_logic_vector(1023 downto 0);
begin -- Rtl
-- buffer
p_main : process (clk, rst_n)
variable count_out_words:integer range 0 to 4;
begin -- process p_main
if rst_n = '0' then -- asynchronous rst_n (active low)
buffer_data <= (others => '0');
count_in_words <= (others => '0');
count_out_words :=0;
buffer_full <='0';
mode<='0';
dout_buffer_out_valid<='0';
elsif clk'event and clk = '1' then -- rising clk edge
if(last_block ='1' and ready='1') then
mode<='1';
end if;
--input mode
if (mode='0') then
if(buffer_full='1' and ready ='1') then
buffer_full<='0';
count_in_words<= (others=>'0');
else
if (din_buffer_in_valid='1' and buffer_full='0') then
--shift buffer
for i in 0 to 14 loop
buffer_data( 63+(i*64) downto 0+(i*64) )<=buffer_data( 127+(i*64) downto 64+(i*64) );
end loop;
--insert new input
buffer_data(1023 downto 960) <= din_buffer_in;
if (count_in_words=15) then
-- buffer full ready for being absorbed by the permutation
buffer_full <= '1';
count_in_words<= (others=>'0');
else
-- increment count_in_words
count_in_words <= count_in_words + 1;
end if;
-- end if;
end if;
end if;
else
--output mode
dout_buffer_out_valid<='1';
if(count_out_words=0) then
buffer_data(255 downto 0) <= dout_buffer_in;
count_out_words:=count_out_words+1;
dout_buffer_out_valid<='1';
--for i in 0 to 2 loop
-- buffer_data( 63+(i*64) downto 0+(i*64) )<=buffer_data( 127+(i*64) downto 64+(i*64) );
--end loop;
else
if(count_out_words<4) then
count_out_words:=count_out_words+1;
dout_buffer_out_valid<='1';
for i in 0 to 2 loop
buffer_data( 63+(i*64) downto 0+(i*64) )<=buffer_data( 127+(i*64) downto 64+(i*64) );
end loop;
else
dout_buffer_out_valid<='0';
count_out_words:=0;
mode<='0';
end if;
end if;
end if;
end if;
end process p_main;
din_buffer_out<=buffer_data;
dout_buffer_out<=buffer_data(63 downto 0);
din_buffer_full<=buffer_full;
end rtl;
library work;
use work.keccak_globals.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity keccak_round is
port (
round_in : in k_state;
round_constant_signal : in std_logic_vector(63 downto 0);
round_out : out k_state);
end keccak_round;
library work;
use work.keccak_globals.all;
library std;
use std.textio.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_misc.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_textio.all;
use ieee.std_logic_unsigned."+";
entity keccak_permutation_tb is
end keccak_permutation_tb;
regards Nissi
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
you cannot compile testbenches in Quartus, as they are not suitable in an FPGA. You need to use a simulator like modelsim.

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