20220414——3-8译码器:例化门及封装、使用

1.建工程、起名字、选芯片、仿真

2.代码

3.仿真

1)tools——options——EDA tools options

 2)assignments——settings

添加testbench

 

`timescale 10 ns/ 10 ps
module decoder38_vlg_tst();
reg clk;								
// test vector input registers*******输入激励设置为reg型
reg  A1,B1,C1,G11,G21;

wire [7:0]  Y1;					
// test vector output wires *******输出相应设置为wire类型                                       
                      
ls138m i1 (
.A(A1),
.B(B1),
.C(C1),
.G1(G11),
.G2(G21),
.Y(Y1)
);//*******例化待测模块
initial                                                
begin                                                  
//  *******initial产生激励               
              
		{C1,B1,A1}=0;
                                    {G11,G21}=2'b00;
		clk=0;
		
		repeat (4)
	
			begin
				repeat(8)		
                                                      	begin
					#1 
					clk= ~clk; 
					{C1,B1,A1}={C1,B1,A1}+1;
				end
				{G11,G21}={G11,G21}+1;
			end                                                       
                
end
endmodule

 3)

 4.

 

5.封装

右键  导出设计分区

 

 6.调用

1)新建文件夹,把刚刚生成的 ls138.qxp 复制到文件夹内

2)新建工程

 添加qxp文件、选择芯片

3)

 

 保存、编译

4)

 无法做仿真

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先需要了解的是,VHDL是一种硬件描述语言,用于设计数字电路。可控加法计数器是一种数字电路,可以实现加法计数器的计数方向和步长的可控性。而3-8译码器是一种数字电路,可以将3位二进制数转换为8位输出信号。因此,我们需要将这两种电路结合起来设计一个可控加法计数器-译码器电路。 下面是一个简单的可控加法计数器-译码器电路的VHDL代码: ``` library ieee; use ieee.std_logic_1164.all; entity counter_decoder is port ( clk: in std_logic; reset: in std_logic; enable: in std_logic; direction: in std_logic; step: in std_logic_vector(1 downto 0); count: out std_logic_vector(2 downto 0); out_decoder: out std_logic_vector(7 downto 0) ); end entity; architecture counter_decoder_arch of counter_decoder is signal temp_count: std_logic_vector(2 downto 0); signal temp_decoder: std_logic_vector(7 downto 0); begin process(clk, reset) begin if reset = '1' then temp_count <= (others => '0'); temp_decoder <= (others => '0'); elsif rising_edge(clk) then if enable = '1' then if direction = '0' then temp_count <= temp_count + step; else temp_count <= temp_count - step; end if; end if; case temp_count is when "000" => temp_decoder <= "00000001"; when "001" => temp_decoder <= "00000010"; when "010" => temp_decoder <= "00000100"; when "011" => temp_decoder <= "00001000"; when "100" => temp_decoder <= "00010000"; when "101" => temp_decoder <= "00100000"; when "110" => temp_decoder <= "01000000"; when "111" => temp_decoder <= "10000000"; when others => temp_decoder <= (others => '0'); end case; end if; end process; count <= temp_count; out_decoder <= temp_decoder; end architecture; ``` 在这个代码中,我们定义了一个实体(entity)`counter_decoder`,它有一些输入端口和输出端口,包括时钟(`clk`)、复位(`reset`)、使能(`enable`)、计数方向(`direction`)、步长(`step`)、计数器输出(`count`)和译码器输出(`out_decoder`)。其中,`count`和`out_decoder`是输出信号,其余都是输入信号。 在架构(architecture)`counter_decoder_arch`中,我们定义了两个信号(signal)`temp_count`和`temp_decoder`,分别用于存储计数器的当前值和译码器的输出值。然后,在一个进程(process)中,我们检测时钟和复位信号的变化,根据使能、计数方向和步长来更新计数器的值,并根据计数器的值来更新译码器的输出值。最后,我们将计数器的值和译码器的输出值分别赋给输出端口`count`和`out_decoder`。 需要注意的是,这只是一个简单的示例代码,可能并不完整或正确。在实际设计中,还需要考虑一些其他的因素,比如时序约束、输入信号的稳定性等。同时,对于3-8译码器的具体实现,也可以根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值