vhdl 数据选择器设计8选1 用CASE语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vhdl 数据选择器设计8选1 用CASE语句相关的知识,希望对你有一定的参考价值。
谢谢,谁能帮帮,急用~~
参考技术A module mux8_1(DOUT,A,D0,D1,D2,D3,D4,D5,D6,D7,CS);input [2:0] A;//定义输入信号
wire [2:0] A;//定义内部结点信号数据类型
input D0;
input D1;
input D2;
input D3;
input D4;
input D5;
input D6;
input D7;
input CS;
wire CS;
output DOUT;//定义输出信号
reg DOUT;
always @(CS or D0 or D1 or D2 or D3 or D4 or D5 or D6 or D7) //过程块结构,以下是逻辑功能描述部分
begin
if (CS==1)
DOUT<=0;
else
case(A) //输入,输出对应的情况,即为行为描述语句
3'b000 : DOUT = D0;
3'b001 : DOUT = D1;
3'b010 : DOUT = D2;
3'b011 : DOUT = D3;
3'b100 : DOUT = D4;
3'b101 : DOUT = D5;
3'b110 : DOUT = D6;
3'b111 : DOUT = D7;
default : DOUT = 1;
endcase
end
endmodule 参考技术B LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
ENTITY mux81 IS
PORT (s1, s2 : IN STD_LOGIC;
a0,a1,a2,a3,a4,a5,a6,a7,a8 : IN STD_LOGIC;
z : OUT STD_LOGIC);
END ENTITY mux81
ARCHITECTURE activ OF mux81 IS
SIGNAL s : STD_LOGIC_VECTOR (2 DOWNTO 0);
BEGIN
s <= s0 & s1 & s2 ;
PROCESS (s , a0, a1, a2, a3, a4, a5, a6, a7,) –-注意这里必须以s 为敏感信号而非s0、s1 和s2
BEGIN
CASE s IS
WHEN "000" => z<= a0 ;
WHEN "001" => z<= a1 ;
WHEN "010" => z<= a2 ;
WHEN "011" => z<= a3 ;
WHEN "100" => z<= a4 ;
WHEN "101" => z<= a5 ;
WHEN "110" => z<= a6 ;
WHEN "111" => z<= a7 ;
WHEN OTHERS => z<= 'X' ;--注意这里的X 必须大写
END CASE
END PROCESS
End activ 参考技术C library ieee;
use ieee.std_logic_1164.all;
entity choose8to1 is
port()
哎呀
很简单啦
我有事
下次再帮你拉
VHDL 元件例化语句的问题,
VHDL 元件例化语句的问题,
元件例化语句怎么用? 简单说就是在写一个 全加器时候,引用半加器
实体是
Entity full_adder is
Port(a ,b,,cin: in std_logic;
S,co: out std_logic);
End full_adder;
在结构体中先说明
Component half_adder
Port(a,b: in std_logic;
s,co: out std_logic);
end component;
然后就引用,。。
有点搞不清楚,
是不是只能引用work库中的元件?
Work库中有那些元件?
我是刚刚开始学VHDL,想学FPGA。
hf_add_gen Component half_adder
Port MAP(a =>a
b =>b
s =>s
co =>co
);
这个写法的意思就是将全加器的端口信号(符号=>后面的那几个)映射到半加器的端口上(符号=>前面的那几个)
在一个工程中自己写的代码都包含在work库中,也就是说work库中只包括在这个工程中写的几个Entity。 除了work库以外还有很多标准库比如ieee库,FPGA开发商写的库比如altera公司的lpm库和altra_mf库以及xilinx公司提供的标准器件库。还有就是自己或者其他人写的一些库文件。标准库和开发商提供的库在文件头直接声明后就可以调用了。 自己写的库需要在编译器里设置好库文件的路径,然后在像标准库一样调用就可以。 参考技术A 引用的东西要在同一个project里的其他文件里有定义才行。
给你个例子看下就明白了,这是引用一位全加器构成一个四位全加器。
project名是adder,里面两个vhd文件,分别为fulladder.vhd和adder.vhd
fulladder.vhd内容如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FullAdder is --这是一位全加器
port(
A:in std_logic;
B:in std_logic;
C:in std_logic;
Carry:out std_logic;
Sum:out std_logic
);
END FullAdder;
architecture a of FullAdder is
begin
Sum<=A xor B xor C;
Carry<=(A and B) or (A and C) or (B and C);
end a;
adder.vhd内容如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity adder is --四位全加器
port(
A,B:in std_logic_vector(3 downto 0);
S:out std_logic_vector(3 downto 0);
C:inout std_logic_vector(4 downto 0)
);
end adder;
architecture a of adder is
component FullAdder --声明component
port(
A:in std_logic;
B:in std_logic;
C:in std_logic;
Carry:out std_logic;
Sum:out std_logic
);
end component;
begin
u1:FullAdder port map(A(0),B(0),C(0),C(1),S(0));
--引用component,u1,u2,u3,u4为映像的标识名,port map是关键字,端口按对应顺序写
u2:FullAdder port map(A(1),B(1),C(1),C(2),S(1));
u3:FullAdder port map(A(2),B(2),C(2),C(3),S(2));
u4:FullAdder port map(A(3),B(3),C(3),C(4),S(3));
C(0)<='0';
end a;
呵呵,来拿分了,我也刚学,以后一起研究吧:)本回答被提问者采纳
以上是关于vhdl 数据选择器设计8选1 用CASE语句的主要内容,如果未能解决你的问题,请参考以下文章
4、试写出4选1多路选择器的VHDL描述,假设选择控制信号为S1、S0,输入信号为d3,d2,d1,d0,输出信号为y。