[FPGA开发] 从零开始学FPGA我的第二个实验(记录一下)

ihalin   2016-7-14 11:19 楼主
感谢小梅哥!!
昨天做了我FPGA的第一个实验
从零开始学FPGA我的第一个实验(记录一下)
今天第二个实验38译码器
真值表
38译码器真值表.png
原理:
有三个(一位)输入
一个输出(8位)
使用了一个always块,always块语句注意阻塞赋值和非阻塞赋值(<=, = )
{a,b,c}位拼接把三个一位的拼接成一个3位的
位拼接:
{a,b[3:0],w,3'b101}等价于{a,b[3],b[2],b[1],b[0],w,1'b1,1'b0,1'b1}
{4{w}}等价于{w,w,w,w}
{b,{3{a,b}}}等价于{b,a,b,a,b,a,b}
case用法和c类似记住还有个default
3'b000表示位宽是3 的二进制 000
位宽+进制+数值
进制+数值(默认位宽有机器系统决定)
数字(默认10进制)
2进制 b/B bin
8进制 o/O octonary
10进制 d/D decimal
16进制h/H hex

  1. module smg3_8(a,b,c,out);

  2.         input a;//输入端口a
  3.         input b;//输入端口b
  4.         input c;//输入端口c
  5.        
  6.         output reg [7:0]out;//输出端口out
  7.        
  8.         always@(a,b,c)begin
  9.                 case({a,b,c})
  10.                         3'b000:  out=8'b0000_0001;//下划线不影响
  11.                         3'b001:        out=8'b0000_0010;
  12.                         3'b010:        out=8'b0000_0100;
  13.                         3'b011:        out=8'b0000_1000;
  14.                         3'b100:        out=8'b0001_0000;
  15.                         3'b101:        out=8'b0010_0000;
  16.                         3'b110:        out=8'b0100_0000;
  17.                         3'b111:        out=8'b1000_0000;
  18.                         //default:
  19.                 endcase
  20.         end
  21. endmodule
测试代码:
reg型是激励信号源的
wire 型的是输出信号的观察信号
  1. `timescale 1ns/1ns

  2. module smg3_8_tb;

  3.         reg a;//reg 型是激励信号源
  4.         reg b;
  5.         reg c;
  6.        
  7.         wire [7:0]out;//wire 型的是出信号的观察信号
  8.         smg3_8 smg(
  9.                    .a(a),
  10.                                   .b(b),
  11.                                   .c(c),
  12.                                   .out(out)
  13.         );
  14.        
  15.         initial begin
  16.         a = 0;b = 0; c = 0;
  17.         #200;
  18.         a = 0;b = 0; c = 1;
  19.         #200;
  20.         a = 0;b = 1; c = 0;
  21.         #200;
  22.         a = 0;b = 1; c = 1;
  23.         #200;
  24.         a = 1;b = 0; c = 0;
  25.         #200;
  26.         a = 1;b = 0; c = 1;
  27.         #200;
  28.         a = 1;b = 1; c = 0;
  29.         #200;
  30.         a = 1;b = 1; c = 1;
  31.         #200;
  32.         $stop;
  33.         end
  34.                
  35. endmodul
RTL仿真:
rtl仿真结果.png
符合设计初衷
然后是门级仿真
门级仿真.png
发现和RTL仿真有些区别会出现一些跳变的过度值如0000 0000,现在还不知道怎么去避免。
出现了问题.png
下面是我在开发板上做的测试
P60714-110701.jpg P60714-110656.jpg P60714-110659.jpg P60714-110707.jpg

谢谢小梅哥!!

回复评论 (11)

1 来自 2楼 okhxyyo 

汇总贴在此:
从零开始学FPGA——by ihalin
https://bbs.eeworld.com.cn/forum. ... 5881&fromuid=536508

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2016-7-25 10:45
看着像是黑金的开发板啊
点赞  2016-7-14 11:24
引用: hljjxzhla 发表于 2016-7-14 11:24
看着像是黑金的开发板啊

嗯对
点赞  2016-7-14 11:32
学习
点赞  2016-7-14 13:13
hei jin de
点赞  2016-7-14 15:11
坚持的ihalin,加油

这个最好这样写,生产性高
a = 0;b = 0; c = 0;  #200;

也可以改成 用读文件,来生成向量激励
MicroPython中文社区https://micropython.org.cn/forum/  
点赞  2016-7-14 21:33
引用: 5525 发表于 2016-7-14 21:33
坚持的ihalin,加油

这个最好这样写,生产性高
a = 0;b = 0; c = 0;  #200;

也可以改成 用 ...

嗯嗯
点赞  2016-7-15 09:07
支持一下,虽然看不懂。
点赞  2016-7-15 09:28
https://bbs.eeworld.com.cn/thread-471646-1-1.html 欢迎加入我的团队
点赞  2016-7-15 12:27
给楼主点个赞
training
点赞  2016-7-15 23:59
我也是这个开发板,做得挺不错的!
点赞  2016-7-19 11:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复