用verilog 实现83译码器

初学verilog 用verilog 实现83译码器


**## ****//初学verilog 用verilog 实现83译码器******

module   decoder83(

input     wire      clk,
input     wire      rst,
input     wire [7:0] indata,
output    reg  [2:0] out
);

always@(posedge clk or posedge rst) begin

if(rst)  //高电平有效
	out<=3'b000;
else
     case(indata) 
	       8'b0000_0001       :          out<=3'b000;
	       8'b0000_0010       :          out<=3'b001;
		   8'b0000_0100       :          out<=3'b010;
		   8'b0000_1000       :          out<=3'b011;
		   8'b0001_0000       :          out<=3'b100;
		   8'b0010_0000       :          out<=3'b101;
		   8'b0100_0000       :          out<=3'b110;
		   8'b1000_0000       :          out<=3'b111;
		          default     :          out<=3'b000;
		endcase
end
endmodule 
**// 测试仿真代码**
`timescale   1ns/1ns
module     decoder83_tb ();

reg             clk;
reg             rst;
reg   [7:0]    indata;
wire  [2:0]     out;

initial   begin
clk=0;
rst=1;
#1  rst=0; indata=8'b0000_0001;

#20  indata=8'b0000_0010;
#20  indata=8'b0000_0100;
#20  indata=8'b0000_1000;
#20  indata=8'b0001_0000;
#20  indata=8'b0010_0000;
#20  indata=8'b0100_0000;
#20  indata=8'b1000_0000;
#850  $stop;
end 

always #10  clk=~clk;

decoder83  inst_decoder83(

.clk                 (clk   ),
.rst                 (rst   ),
.indata              (indata),
.out                 (out   )
);
endmodule  

在这里插入图片描述

下面是一个基于Verilog的分组译码器实现的示例,实现了将二进制数转换为十进制数。 ``` module decoder(input [7:0] binary, output reg [3:0] decimal); always @(*) begin case(binary) 4'b0000: decimal = 4'b0000; 4'b0001: decimal = 4'b0001; 4'b0010: decimal = 4'b0010; 4'b0011: decimal = 4'b0011; 4'b0100: decimal = 4'b0100; 4'b0101: decimal = 4'b0101; 4'b0110: decimal = 4'b0110; 4'b0111: decimal = 4'b0111; 4'b1000: decimal = 4'b1000; 4'b1001: decimal = 4'b1001; 4'b1010: decimal = 4'b1010; 4'b1011: decimal = 4'b1011; 4'b1100: decimal = 4'b1100; 4'b1101: decimal = 4'b1101; 4'b1110: decimal = 4'b1110; 4'b1111: decimal = 4'b1111; default: decimal = 4'b0000; endcase end endmodule ``` 这个示例使用了一个`case`语句实现分组译码,根据输入的二进制数,输出对应的十进制数。`default`语句是可选的,它定义了当输入的值不在任何一个case中匹配时,输出什么值。在这个例子中,它被设置为输出0。 在这个示例中,我们定义了一个名为`binary`的8位输入端口和一个名为`decimal`的4位输出端口。我们使用`always`块来计算输出的值,这个块的敏感列表被设置为`*`,表示对任何输入信号的变化都要进行计算。在`case`语句内部,我们比对了输入二进制数的每个值,并设置了对应的输出值。最后,我们将输出值写入`decimal`端口中。 该模块可以使用Verilog仿真器进行仿真,也可以合成到FPGA中进行硬件实现
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值