谁有vhdl三位或门的程序

谁有vhdl三位或门的程序,第1张

以下是一个VHDL编写的同步程序,希望对你有用

-----------------------------------------------------------------------------

--

-- The following information has been generated by Exemplar Logic and

-- may be freely distributed and modified.

--

-- Design name : pseudorandom

--

-- Purpose : This design is a pseudorandom number generator. This design

-- will generate an 8-bit random number using the polynomial p(x) = x + 1.

-- This system has a seed generator and will generate 2**8 - 1 unique

-- vectors in pseudorandom order. These vectors are stored in a ram which

-- samples the random number every 32 clock cycles. This variance of a

-- priority encoded seed plus a fixed sampling frequency provides a truely

-- random number.

--

-- This design used VHDL-1993 methods for coding VHDL.

--

----------------------------------------------------------------------------

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

entity divide_by_n is

generic (data_width : natural := 8 )

port (

data_in : in UNSIGNED(data_width - 1 downto 0)

load : in std_logic

clk : in std_logic

reset : in std_logic

divide : out std_logic

)

end divide_by_n

architecture rtl of divide_by_n is

signal count_reg : UNSIGNED(data_width - 1 downto 0)

constant max_count : UNSIGNED(data_width - 1 downto 0) := (others =>'1')

begin

cont_it : process(clk,reset)

begin

if (reset = '1') then

count_reg <= (others =>'0')

elsif (clk = '1' and clk'event) then

if (load = '1') then

count_reg <= data_in

else

count_reg <= count_reg + "01"

end if

end if

end process

divide <= '1' when count_reg = max_count else '0'

end RTL

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

entity dlatrg is

generic (data_width : natural := 16 )

port (

data_in : in UNSIGNED(data_width - 1 downto 0)

clk : in std_logic

reset : in std_logic

data_out : out UNSIGNED(data_width - 1 downto 0)

)

end dlatrg

architecture rtl of dlatrg is

begin

latch_it : process(data_in,clk,reset)

begin

if (reset = '1') then

data_out <= (others =>'0')

elsif (clk = '1') then

data_out <= data_in

end if

end process

end RTL

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

entity lfsr is

generic (data_width : natural := 8 )

port (

clk : in std_logic

reset : in std_logic

data_out : out UNSIGNED(data_width - 1 downto 0)

)

end lfsr

architecture rtl of lfsr is

signal feedback : std_logic

signal lfsr_reg : UNSIGNED(data_width - 1 downto 0)

begin

feedback <= lfsr_reg(7) xor lfsr_reg(0)

latch_it : process(clk,reset)

begin

if (reset = '1') then

lfsr_reg <= (others =>'0')

elsif (clk = '1' and clk'event) then

lfsr_reg <= lfsr_reg(lfsr_reg'high - 1 downto 0) &feedback

end if

end process

data_out <= lfsr_reg

end RTL

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

entity priority_encoder is

generic (data_width : natural := 25

address_width : natural := 5 )

port (

data : in UNSIGNED(data_width - 1 downto 0)

address : out UNSIGNED(address_width - 1 downto 0)

none : out STD_LOGIC

)

end priority_encoder

architecture rtl of priority_encoder is

attribute SYNTHESIS_RETURN : STRING

FUNCTION to_stdlogic (arg1:BOOLEAN) RETURN STD_LOGIC IS

BEGIN

IF(arg1) THEN

RETURN('1')

ELSE

RETURN('0')

END IF

END

function to_UNSIGNED(ARG: INTEGERSIZE: INTEGER) return UNSIGNED is

variable result: UNSIGNED(SIZE-1 downto 0)

variable temp: integer

attribute SYNTHESIS_RETURN of result:variable is "FEED_THROUGH"

begin

temp := ARG

for i in 0 to SIZE-1 loop

if (temp mod 2) = 1 then

result(i) := '1'

else

result(i) := '0'

end if

if temp >0 then

temp := temp / 2

else

temp := (temp - 1) / 2

end if

end loop

return result

end

constant zero : UNSIGNED(data_width downto 1) := (others =>'0')

begin

PRIO : process(data)

variable temp_address : UNSIGNED(address_width - 1 downto 0)

begin

temp_address := (others =>'0')

for i in data_width - 1 downto 0 loop

if (data(i) = '1') then

temp_address := to_unsigned(i,address_width)

exit

end if

end loop

address <= temp_address

none <= to_stdlogic(data = zero)

end process

end RTL

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

use IEEE.std_logic_unsigned.all

entity ram is

generic (data_width : natural := 8

address_width : natural := 8)

port (

data_in : in UNSIGNED(data_width - 1 downto 0)

address : in UNSIGNED(address_width - 1 downto 0)

we : in std_logic

clk : in std_logic

data_out : out UNSIGNED(data_width - 1 downto 0)

)

end ram

architecture rtl of ram is

type mem_type is array (2**address_width downto 0) of UNSIGNED(data_width - 1 downto 0)

signal mem : mem_type

signal addr_reg : unsigned (address_width -1 downto 0)

begin

data_out <= mem(conv_integer(addr_reg))

I0 : process

begin

wait until clk'event and clk = '1'

if (we = '1') then

mem(conv_integer(address)) <= data_in

end if

addr_reg <= address

end process

end RTL

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

entity tbuf is

generic (data_width : natural := 16 )

port (

data_in : in UNSIGNED(data_width - 1 downto 0)

en : in std_logic

data_out : out UNSIGNED(data_width - 1 downto 0)

)

end tbuf

architecture rtl of tbuf is

begin

three_state : process(data_in,en)

begin

if (en = '1') then

data_out <= data_in

else

data_out <= (others =>'Z')

end if

end process

end RTL

Library IEEE

use IEEE.std_logic_1164.all

use IEEE.std_logic_arith.all

entity pseudorandom is

generic (data_width : natural := 8 )

port (

seed : in UNSIGNED (24 downto 0)

init : in UNSIGNED (4 downto 0)

load : in std_logic

clk : in std_logic

reset : in std_logic

read : in std_logic

write : in std_logic

rand : out UNSIGNED (7 downto 0)

none : out std_logic

)

end pseudorandom

architecture rtl of pseudorandom is

signal latch_seed : UNSIGNED(24 downto 0)

signal encoder_address : UNSIGNED(4 downto 0)

signal random_data : UNSIGNED(7 downto 0)

signal write_enable : std_logic

signal ram_data : UNSIGNED(7 downto 0)

begin

I0 : entity work.dlatrg(rtl)

generic map (25)

port map (seed,read,reset,latch_seed)

I1 : entity work.priority_encoder(rtl)

generic map (25,5)

port map (latch_seed,encoder_address,none)

I2 : entity work.ram(rtl)

generic map (8,5)

port map (random_data,encoder_address,write_enable,clk,ram_data)

I3 : entity work.tbuf(rtl)

generic map (8)

port map (ram_data,write,rand)

I4 : entity work.lfsr(rtl)

generic map (8)

port map (clk,reset,random_data)

I5 : entity work.divide_by_n(rtl)

generic map (5)

port map (init,load,clk,reset,write_enable)

end rtl

组成或门需用两个或非门,方法是:将一个或非门输入端短接变成非门,将其输入端与另一或非门输出端相连,这样或非门经过两次取反就组成了或门。

或门(OR gate),又称或电路逻辑和电路。如果几个条件中,只要有一个条件得到满足,某事件就会发生,这种关系叫做“或”逻辑关系。具有“或”逻辑关系的电路叫做或门。或门有多个输入端,一个输出端,只要输入中有一个为高电平时(逻辑“1”),输出就为高电平(逻辑“1”);只有当所有的输入全为低电平(逻辑“0”)时,输出才为低电平(逻辑“0”)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11350725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存