FPGA_verilog之三八译码器的实现学习_day08

38译码器实现以及相关语法基础

img

1、38译码器简介

3个信号ABC控制8个开关

Design Source

module decoder_3_8(  //括号里面是端口列表

    a,
    b,
    c,
    out



);

    input a,b,c;  //端口定义
    output reg [7:0] out;//对out定义为1个8位的数据
    //always块描述的信号赋值,被赋值对象必须定义为reg
   // reg [7:0] out; //定义out为1个8位的寄存器

  always @(*)  
  begin
    
  
  //一个等价的写法是always @(a, b, c),其中的*表示通配符
  //always表示一个语法块
    case ({a,b,c}) //里面的大括号内容:{a,b.c}表示一个3位的信号这种操作叫做拼接
    3'b000: out = 8'b0000_0001;  //b表示binary 二进制,3'b000,表示一个3位的二进制信号,值为000
    3'b001: out = 8'b00000010;  //还有常用的格式,比如 d是十进制,3'd5,表示一个3位的十进制信号,值为5和3'b101完全等价
    3'b010: out = 8'b00000100;  //h是十六进制 
    3'b011: out = 8'b00001000;   //o是八进制符号
    3'b100: out = 8'b00010000;
    3'b101: out = 8'b00100000;
    3'b110: out = 8'b01000000;
    3'b111: out = 8'b10000000;
        
    endcase
  end
//一个拼接的例子
//wire [3:0]d;
//assign d = {a,1'b0,b,c};
//拼接了一个四位的信号,其中第一位是a,第二位是0,第三位是b,第四位是c

endmodule

写完代码后进行RUN Synthesis, View Report,然后进行功能仿真

开始写test bench文件

cREATE SIMULATION SOURCES

`timescale 1ns/1ns //第一个是时间单位,第二个是时间精度
module decoder_3_8_tb; //由于这是仿真文件所以不需要写模块端口号

//开始例化

reg s_a,s_b,s_c; //定义s_a,s_b,s_c为reg信号
wire [7:0] s_out; //定义s_out为wire信号

decoder_3_8 decoder_3_8(
    .a(s_a),
    .b(s_b), //这里的s_a,s_b,s_c,s_out都是仿真文件中的信号
    .c(s_c), //a,b,c都是激励信号,都要设计成reg信号
    .out(s_out) //out是要被观测的信号,定义成wire类型
);

//结束例化
//开始产生激励
initial begin
    s_a = 0; s_b = 0; s_c = 0; //初始化信号
    #200 s_a = 0; s_b = 0; s_c = 1; //200ns后,s_a = 0; s_b = 0; s_c = 1;
    #200 s_a = 0; s_b = 1; s_c = 0; //200ns后,s_a = 0; s_b = 1; s_c = 0;
    #200 s_a = 0; s_b = 1; s_c = 1; //200ns后,s_a = 0; s_b = 1; s_c = 1;
    #200 s_a = 1; s_b = 0; s_c = 0; //200ns后,s_a = 1; s_b = 0; s_c = 0;
    #200 s_a = 1; s_b = 0; s_c = 1; //200ns后,s_a = 1; s_b = 0; s_c = 1;
    #200 s_a = 1; s_b = 1; s_c = 0; //200ns后,s_a = 1; s_b = 1; s_c = 0;
    #200 s_a = 1; s_b = 1; s_c = 1; //200ns后,s_a = 1; s_b = 1; s_c = 1;
end




endmodule

写完代码后保存

RUN Sythesis综合一下看看有没有报错,没有报错则进行
RUN Simulation

img

如果你想仿真时间长一点可以在endmodule前面你想停止仿真的地方加上语句

$stop;

进行仿真结束就可以开始板级调试了

Open Synthesized Design -> Layout ->I/O planing->这个就得看板子要求了->

ctrl+s保存,

管脚分配完成了就可以进行布局布线了

RUN Implementation

或者 Generate Bitstream一步到位 一般它会让你先分析和综合一下,->Open Hardware Manager(板子通电开始烧录)->open connected ->auto connected-》在hardware里面选中你的xc7a35t芯片->Program Device (烧录完成)

posted @ 2023-10-30 21:33  lycheezhang  阅读(2155)  评论(0)    收藏  举报