找回密码
 注册
关于网站域名变更的通知
查看: 418|回复: 1
打印 上一主题 下一主题

转——从零开始学FPGA——by ihalin——38译码器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-1 11:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——从零开始学FPGA——by ihalin——38译码器
感谢小梅哥!!  s* [' l! P# c0 e! _) e, j* E# i
昨天做了我FPGA的第一个实验
! F/ q% |1 x% O* L7 }从零开始学FPGA我的第一个实验(记录一下)* w% \& t0 {! ~3 i1 V# K2 J3 Z6 t6 \
今天第二个实验38译码器
: i; |" Q/ C5 H' H6 D; ?真值表* e1 ^( {5 C# g. k. k  V
7 O/ I. u! ?3 _* Y& z
原理:
9 P2 l2 i  L- }1 F' B" L, c" B有三个(一位)输入 ) d) t! X# U  p7 h
一个输出(8位)4 o6 `1 ~0 z1 v5 y3 Y0 q
使用了一个always块,always块语句注意阻塞赋值和非阻塞赋值(<=, = )
2 K6 n; b) b5 z6 x) P{a,b,c}位拼接把三个一位的拼接成一个3位的7 ?& A/ c; u' k/ j* z, o
位拼接:
8 n, j! s0 Y9 |* `# R+ S% ]{a,b[3:0],w,3'b101}等价于{a,b[3],b[2],b[1],b[0],w,1'b1,1'b0,1'b1}
- |) N" Z' H8 T" s5 K" o{4{w}}等价于{w,w,w,w}( [. M" H2 @. B% U* i! u7 d
{b,{3{a,b}}}等价于{b,a,b,a,b,a,b}( o# {/ O" t# d2 H' B4 I
case用法和c类似记住还有个default/ ?" b6 _* D9 X$ L+ q
3'b000表示位宽是3 的二进制 000; n  S) j6 N5 S5 g4 ]
位宽+进制+数值1 I6 Z* G/ m+ N7 h% e
进制+数值(默认位宽有机器系统决定)
6 A, ~1 Z  f- p! A6 m数字(默认10进制)
# I7 h+ N! a* k; t3 P- @  M- t2进制 b/B bin3 b! c& N# v& u/ x5 u9 Y/ T& T
8进制 o/O octonary4 r- V/ o4 a: m  B) y- k% r
10进制 d/D decimal
. c6 N' h! M3 r; g0 B16进制h/H hex
1. module smg3_8(a,b,c,out);
2.
3.         input a;//输入端口a
4.         input b;//输入端口b
5.         input c;//输入端口c
6.         
7.         output reg [7:0]out;//输出端口out
8.         
9.         always@(a,b,c)begin
10.                 case({a,b,c})
11.                         3'b000:  out=8'b0000_0001;//下划线不影响
12.                         3'b001:        out=8'b0000_0010;
13.                         3'b010:        out=8'b0000_0100;
14.                         3'b011:        out=8'b0000_1000;
15.                         3'b100:        out=8'b0001_0000;
16.                         3'b101:        out=8'b0010_0000;
17.                         3'b110:        out=8'b0100_0000;
18.                         3'b111:        out=8'b1000_0000;
19.                         //default:
20.                 endcase
21.         end
22. endmodule
测试代码:
( s3 ^) R( x" l* b& S
reg型是激励信号源的; D) y. @/ t2 c
wire 型的是输出信号的观察信号
1. `timescale 1ns/1ns
2.
3. module smg3_8_tb;
4.
5.         reg a;//reg 型是激励信号源
6.         reg b;
7.         reg c;
8.         
9.         wire [7:0]out;//wire 型的是出信号的观察信号
10.         smg3_8 smg(
11.                    .a(a),
12.                                   .b(b),
13.                                   .c(c),
14.                                   .out(out)
15.         );
16.         
17.         initial begin
18.         a = 0;b = 0; c = 0;
19.         #200;
20.         a = 0;b = 0; c = 1;
21.         #200;
22.         a = 0;b = 1; c = 0;
23.         #200;
24.         a = 0;b = 1; c = 1;
25.         #200;
26.         a = 1;b = 0; c = 0;
27.         #200;
28.         a = 1;b = 0; c = 1;
29.         #200;
30.         a = 1;b = 1; c = 0;
31.         #200;
32.         a = 1;b = 1; c = 1;
33.         #200;
34.         $stop;
35.         end
36.                 
37. endmodul
RTL仿真:

. p+ n# s* c6 N* Y9 h  F0 {
符合设计初衷
# G$ _! a' V& O7 A, D3 L4 w5 I4 U
然后是门级仿真
3 p* c9 A7 W* e1 D. m; `
. H1 A! r. u: l9 B
发现和RTL仿真有些区别会出现一些跳变的过度值如0000 0000,现在还不知道怎么去避免。
/ B8 r2 q, H/ I
$ t, ]$ K  p8 B7 w) [
下面是我在开发板上做的测试* C) ]* E: t- D# |/ o: @

/ Y& p. P9 l/ D* u+ ^/ W8 I! y' e

该用户从未签到

2#
发表于 2019-4-1 16:40 | 只看该作者
教程很想详细啊 楼主费心了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 14:25 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表