8bits-cpu-model/source/Decoder.v
2022-10-07 17:17:24 +08:00

69 lines
3.2 KiB
Verilog

`timescale 1ns / 1ps
module Decoder(
input wire [7:0] cmd,
output wire [27:0] res,//xxxxxxxxxxxxxx
output wire [3:0] Tgt1,
output wire [3:0] Tgt2
);
wire [1:0] re1,re2;
assign res[0]=~cmd[7]&~cmd[6]&~cmd[5]&~cmd[4]&cmd[3]&cmd[2]&cmd[1]&cmd[0];
assign res[1]=~cmd[7]&~cmd[6]&~cmd[5]&~cmd[4]&~cmd[3]&~cmd[2]&~cmd[1]&cmd[0];
assign res[2]=~cmd[7]&~cmd[6]&~cmd[5]&~cmd[4]&~cmd[3]&~cmd[2]&cmd[1]&~cmd[0];
assign res[3]=cmd[7]&cmd[6]&~cmd[5]&~cmd[4]&~cmd[3]&~cmd[2];
assign res[4]=cmd[7]&cmd[6]&~cmd[5]&~cmd[4]&~cmd[3]&cmd[2];
assign res[5]=cmd[7]&cmd[6]&~cmd[5]&~cmd[4]&cmd[3]&~cmd[2];
assign res[6]=cmd[7]&cmd[6]&~cmd[5]&~cmd[4]&cmd[3]&cmd[2];
assign res[7]=cmd[7]&cmd[6]&~cmd[5]&cmd[4]&~cmd[3]&~cmd[2];
assign res[8]=cmd[7]&cmd[6]&~cmd[5]&cmd[4]&~cmd[3]&cmd[2];
assign res[9]=cmd[7]&cmd[6]&~cmd[5]&cmd[4]&cmd[3]&~cmd[2];
assign res[10]=cmd[7]&cmd[6]&~cmd[5]&cmd[4]&cmd[3]&cmd[2];
assign res[11]=cmd[7]&cmd[6]&cmd[5]&~cmd[4]&~cmd[3]&~cmd[2];
assign res[12]=cmd[7]&cmd[6]&cmd[5]&~cmd[4]&~cmd[3]&cmd[2];
assign res[13]=cmd[7]&cmd[6]&cmd[5]&~cmd[4]&cmd[3]&~cmd[2];
assign res[14]=~cmd[7]&~cmd[6]&~cmd[5]&cmd[4];
assign res[15]=~cmd[7]&~cmd[6]&cmd[5]&~cmd[4];
assign res[16]=~cmd[7]&~cmd[6]&cmd[5]&cmd[4];
assign res[17]=~cmd[7]&cmd[6]&~cmd[5]&~cmd[4];
assign res[18]=~cmd[7]&cmd[6]&~cmd[5]&cmd[4];
assign res[19]=~cmd[7]&cmd[6]&cmd[5]&~cmd[4];
assign res[20]=~cmd[7]&cmd[6]&cmd[5]&cmd[4];
assign res[21]=cmd[7]&~cmd[6]&~cmd[5]&~cmd[4];
assign res[22]=cmd[7]&~cmd[6]&~cmd[5]&cmd[4];
assign res[23]=cmd[7]&~cmd[6]&cmd[5]&~cmd[4];
assign res[24]=cmd[7]&cmd[6]&cmd[5]&cmd[4]&~cmd[3]&~cmd[2];
assign res[25]=cmd[7]&cmd[6]&cmd[5]&cmd[4]&~cmd[3]&cmd[2];
assign res[26]=cmd[7]&cmd[6]&cmd[5]&cmd[4]&cmd[3]&~cmd[2];
assign res[27]=cmd[7]&cmd[6]&cmd[5]&cmd[4]&cmd[3]&cmd[2];
assign re1[0] = (res[0]||res[1]||res[2])? 1'bZ:((res[3]||res[4]||res[5]||res[6]||res[7]||res[8]||res[9]||res[10]||res[11]||res[12]||res[13]||res[24]||res[25]||res[26]||res[27])&cmd[0])|
((res[14]||res[15]||res[16]||res[17]||res[18]||res[19]||res[20]||res[21]||res[22]||res[23])&cmd[2]);
assign re1[1] = (res[0]||res[1]||res[2])? 1'bZ:((res[3]||res[4]||res[5]||res[6]||res[7]||res[8]||res[9]||res[10]||res[11]||res[12]||res[13]||res[24]||res[25]||res[26]||res[27])&cmd[1])|
((res[14]||res[15]||res[16]||res[17]||res[18]||res[19]||res[20]||res[21]||res[22]||res[23])&cmd[3]);
assign re2[0] = (res[0]||res[1]||res[2]||res[3]||res[4]||res[5]||res[6]||res[7]||res[8]||res[9]||res[10]||res[11]||res[12]||res[13]||res[24]||res[25]||res[26]||res[27])? 1'bZ:(res[14]||res[15]||res[16]||res[17]||res[18]||res[19]||res[20]||res[21]||res[22]||res[23])&&cmd[0];
assign re2[1] = (res[0]||res[1]||res[2]||res[3]||res[4]||res[5]||res[6]||res[7]||res[8]||res[9]||res[10]||res[11]||res[12]||res[13]||res[24]||res[25]||res[26]||res[27])? 1'bZ:(res[14]||res[15]||res[16]||res[17]||res[18]||res[19]||res[20]||res[21]||res[22]||res[23])&&cmd[1];
assign Tgt1[3] = re1[1]&re1[0];
assign Tgt1[2] = re1[1]&~re1[0];
assign Tgt1[1] = ~re1[1]&re1[0];
assign Tgt1[0] = ~re1[1]&~re1[0];
assign Tgt2[3] = re2[1]&re2[0];
assign Tgt2[2] = re2[1]&~re2[0];
assign Tgt2[1] = ~re2[1]&re2[0];
assign Tgt2[0] = ~re2[1]&~re2[0];
endmodule