大话硬件
认证:优质创作者
所在专题目录 查看专题
FPGA基础知识(1)基本概念
FPGA学习(2)设计3-8译码器
作者动态 更多
你知道电感的七大关键参数吗?
8小时前
芯片内部如何实现VREF参考稳压源?
08-23 11:57
DC-DC控制器芯片内部如何实现PWM控制?
08-20 10:39
反激式电源为什么上电最容易烧MOS管?
08-07 19:11
芯片外置电阻RC如何实现振荡器功能?
08-07 15:27

FPGA学习(2)设计3-8译码器

1.学习目标:设计3—8译码器

2.真值表

3.编写verilog代码

//声明
    module decoder3_8(
    
    a,b,c,
    out
    
    
    
    );
//说明    
    input a;
    input b;
    input c;
    output [7:0]out;
    reg [7:0] out;   //因为out在always块中使用,要定义成reg类型
//时序逻辑    
    always @(a,b,c)   //always@(*)
    
    begin
    
    case({a,b,c})
      
        3'b000: out=8'b0000_0001;
    	 3'b001: out=8'b0000_0010;
    	 3'b010: out=8'b0000_0100;
    	 3'b011: out=8'b0000_1000;
    	 3'b100: out=8'b0001_0000;
    	 3'b101: out=8'b0010_0000;
    	 3'b110: out=8'b0100_0000;
    	 3'b111: out=8'b1000_0000;
    	 endcase
    	 //可加default
    
    end      
    endmodule

4.编写仿真激励代码

// 

`timescale 1 ns/ 1 ns   //设置精度
module decoder3_8_vlg_tst();
// constants                                           
// general purpose registers

// test vector input registers
reg a;
reg b;
reg c;
// wires                                               
wire [7:0]  out;

// assign statements (if any)                          
decoder3_8 i1 (
// port map - connection between master ports and signals/registers   
	.a(a),
	.b(b),
	.c(c),
	.out(out)
);
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
      a=0;b=0;c=0;
      #200;
      a=0;b=0;c=1;
      #200;	
      a=0;b=1;c=0;
      #200;
      a=0;b=1;c=1;
      #200;
	   a=1;b=0;c=0;
      #200;
      a=1;b=0;c=1;
      #200;	
      a=1;b=1;c=0;
      #200;
      a=1;b=1;c=1;
      #200;		//延时200ns
		$stop;
		
// --> end                                             
$display("Running testbench");                       
end                                                    
                                                 
    endmodule

5.测试结果

6.总结问题

verilog语言中的数据类型,在编写仿真文件的过程中,在case语句下,最开始编写的是:

 3'b000: out=0000_0001;
 3'b001: out=0000_0010;
 3'b010: out=0000_0100;

没有在后面的数据加上8‘b

导致在最后查波形的时候,一直出现问题,原因是对Verilog数据类型还是不够清楚。下面是Verilog中的数字表示方法(1)整数在verilog语言中,数字的表示方式有三种:1.<位宽><进制><数字>比如:8‘b 0000_0001 属于全面的描述方式2.<进制><数字>比如:b 001 属于缺省位宽的描述方式,机器的系统决定,至少32位3.<数字>比如: 2 缺省进制十进制描述

(2)x和z的值

在数字电路中,x代表不定值,z代表高阻值。

(3)负数“-”号必须写在最前面,比如-8‘b0000_0001(4)下划线下划线可以提高数字书写时,让程序更具有可读性,只能用在数字之间,也就是“_”的前面肯定是数字。比如写50MHz,可写成50_000_000Hz

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 5
收藏 3
关注 576
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧