Quartus Prime18.0+Modelsim:3-8译码器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、代码

RTL Viewer:
在这里插入图片描述

always和case两种方法得到的RTL Viewer的结果不同,如下:
图1 always结果

图2 case结果
前者是always方法,后者是case方法。
代码如下:

module decoder
(
input wire in_1,
input wire in_2,
input wire in_3,

output reg [7:0] out
);
//output可以用wire,也可以用reg,如果用always语句就用reg,assign语句就用wire,位宽8bit
//进行赋值,if else存在优先级
always@(*)
if({in_1,in_2,in_3}==3'b000)
out=8'b0000_0001;
else if({in_1,in_2,in_3}==3'b001)
out=8'b0000_0010;
else if({in_1,in_2,in_3}==3'b010)
out=8'b0000_0100;
else if({in_1,in_2,in_3}==3'b011)
out=8'b0000_1000;
else if({in_1,in_2,in_3}==3'b100)
out=8'b0001_0000;
else if({in_1,in_2,in_3}==3'b101)
out=8'b0010_0000;
else if({in_1,in_2,in_3}==3'b110)
out=8'b0100_0000;
else if({in_1,in_2,in_3}==3'b111)
out=8'b1000_0000;
else
out=8'b0000_0001;

/* always@(*)
case({in_1,in_2,in_3})
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;
default:out=8'b0000_0001;
endcase */
//Rtl Viewer:代码被中合成一个3-8译码器
endmodule

二、测试代码

代码如下:

`timescale 1ns/1ns
//时间尺度 时间单位/时间精度
module tb_decoder();
//使用always initial语句进行赋值的一律是reg型,使用assign的一律是wire型
reg in_1;
reg in_2;
reg in_3;

wire [7:0] out;

//输入信号的初始化
initial
   begin in_1<=1'b0;
         in_2<=1'b0;
         in_3<=1'b0;
   end

//always语句进行随机数的赋值,#表示时间延时,10表示延时10个时间单位,即10ns
always #10 in_1<={$random}%2;
always #10 in_2<={$random}%2;
always #10 in_3<={$random}%2;

initial 
    begin
         $timeformat(-9,0,"ns",6);
//首先是时间格式的设置(时间单位     小数位   时间单位名称    打印数据位宽)
//-9是ns级别,0是小数位的设置,即不打印
//其次使用检测函数
         $monitor("@time %t:in_1=%b,in_2=%b,in_3=%b,out=%b",$time,in_1,in_2,in_3,out);
    end
//实例化,模块名称+实例化名称
decoder decoder_inst
(
.in_1(in_1),
.in_2(in_2),
.in_3(in_3),
.out (out)
);
endmodule

这里解释一下实例化部分:
在这里插入图片描述

括号里的in_1是图左侧左列的,是仿真文件模拟生成的in_1,可以更改;括号前的in_1是图左侧右列的,.相当于连线进行连接;括号里的out是图右侧右列的,括号前的out是图右侧左列的。

三、Modulsim相关

1.Ctrl A+Delete 删除数据,可在sim—Default选项卡右键Add Wave添加tb_decoder和decoder_inst(或选中+Ctrl W进行快速添加),Ctrl G进行分组;
在这里插入图片描述
2.点击左下角第一行第一个按钮,可删除路径,只显示名称;
3.点击in_1右键->Radix->…,可选择进制之间的转换;
4.如上图:0 1 1->0000_1000。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小年痴槑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值