求助一个程序
代码如下:module decoding(datain,dataout);
input [4:0] datain;
output [30:0] dataout;
reg dataout;
always @(datain)
case(datain)
5'd0:dataout= 31'b0000000000000000000000000000000;
5'd1:dataout= 31'b0000000000000000000000000000001;
5'd2:dataout= 31'b0000000000000000000000000000011;
5'd3:dataout= 31'b0000000000000000000000000000111;
5'd4:dataout= 31'b0000000000000000000000000001111;
5'd5:dataout= 31'b0000000000000000000000000011111;
5'd6:dataout= 31'b0000000000000000000000000111111;
5'd7:dataout= 31'b0000000000000000000000001111111;
5'd8:dataout= 31'b0000000000000000000000011111111;
5'd9:dataout= 31'b0000000000000000000000111111111;
5'd10:dataout=31'b0000000000000000000001111111111;
5'd11:dataout=31'b0000000000000000000011111111111;
5'd12:dataout=31'b0000000000000000000111111111111;
5'd13:dataout=31'b0000000000000000001111111111111;
5'd14:dataout=31'b0000000000000000011111111111111;
5'd15:dataout=31'b0000000000000000111111111111111;
5'd16:dataout=31'b0000000000000001111111111111111;
5'd17:dataout=31'b0000000000000011111111111111111;
5'd18:dataout=31'b0000000000000111111111111111111;
5'd19:dataout=31'b0000000000001111111111111111111;
5'd20:dataout=31'b0000000000011111111111111111111;
5'd21:dataout=31'b0000000000111111111111111111111;
5'd22:dataout=31'b0000000001111111111111111111111;
5'd23:dataout=31'b0000000011111111111111111111111;
5'd24:dataout=31'b0000000111111111111111111111111;
5'd25:dataout=31'b0000001111111111111111111111111;
5'd26:dataout=31'b0000011111111111111111111111111;
5'd27:dataout=31'b0000111111111111111111111111111;
5'd28:dataout=31'b0001111111111111111111111111111;
5'd29:dataout=31'b0011111111111111111111111111111;
5'd30:dataout=31'b0111111111111111111111111111111;
5'd31:dataout=31'b1111111111111111111111111111111;
endcase
endmodule
testbench的内容呢?波形图呢?什么信号出现了高阻?
testbench代码:
module tst;
reg [4:0]din;
wire [30:0]dout;
initial begin
din= 5'b00000;
end
always begin
#100 din=din+1;
end
decode decode(din,dout);
endmodule
图为


你好,首先确认你想设计一个什么东西。如果是5-32译码器,那么你的程序表达的含义并不是译码器,你可以看一看它的RTL级原理图。译码器的风格应当是类似于独热码,即赋值中只有一位是有效的,即31‘b0000100000000000000000000000000
另外你的编码风格需要注意,要加上begin~end块,并且在case语句中要加default项。
verilog设计硬件不是像软件一样编程,而是先要知道你想要什么。
谢了,具体我应该怎么改要实现功能为
找到你的问题了
reg dataout应该是reg [30:0]dataout教训吧,编程风格很重要
一个是编码风格,另一个是查错方法。其实只要你把所有信号和reg都引出来看,就能发现问题了
个人感觉写得不太好啊
问下各位老师,这样的模块,没有clk,实际工程中有用么?
谢谢老师!万分感谢,下次一定吸取教训。这个程序我用循环做了试试,能仿真出来,但是综合却有问题纯软件风格.....
5-32编码器为什么端口定义是[30:0]编码结果只有31位?
故意的一部分重编码?
只要31位就够了
恩....思维固化了....全0也被拿出来用了....我第一反应是one-hot code..
谢谢提醒~感觉程序很…呃,
LZ参考下4#意见吧
呵呵,很菜吧!经验啊,我也学着
output已经定义了31位,reg outdata没有问题...TIPS:一个更好地端口申明方法是在端口方向上定义位宽而不是在在端口类型上定义....
一个纯组合逻辑的模块而已。不受时钟的影响,实际设计也有这样的模块。
谢谢提醒!
有问题,自己去仿真。
