verilog / PORT80h translator1_570


verilog

■ページ内リンク
1.PORT80h DECODER
1-1.タイミングチャート
1-2-1.ピン一覧_評価ボードAZMMAXVT1
1-2-2.ピン一覧_CPLD_5M570ZT144C5N
1-3.ソースコード
1-4.テストベンチソースコード

1.PORT80h DECODER2

1-1.タイミングチャート

下記のような構成を考える。

#ref(): File not found: "lpc1.png" at page "verilog/PORT80h translator1_570"


1-2.ピン一覧

CN1240570CN2240570
Pin番号種別種別CPLD信号名基板上LEDIn/OutPin番号説明Pin信号名基板上LEDIn/Out
1VCC_A-+3.3V+3.3V-1VCC_B-+3.3V+3.3V-
2VCC_A-+3.3V+3.3V-2VCC_B-+3.3V+3.3V-
3GND-GND-3GND-GND-
4GND-GND-4GND-GND-
5I/O216汎用IO5I/O91133汎用IO7LED1_AOut
6I1420入力専用端子RSTIn6I/O90132汎用IO7LED2_BOut
7I/O321汎用IOPOSTDATA[7]LED7Out7I/O89129汎用IO7LED3_COut
8I/O422汎用IOPOSTDATA[6]LED6Out8I/O88127汎用IO7LED4_DOut
9I/O523汎用IOPOSTDATA[5]LED5Out9I/O87125汎用IO7LED5_EOut
10I/O624汎用IOPOSTDATA[4]LED4Out10I/O86122汎用IO7LED6_FOut
11I/O727汎用IOPOSTDATA[3]LED3Out11I/O85121汎用IO7LED7_GOut
12I/O828汎用IOPOSTDATA[2]LED2Out12I/O84120汎用IO7LED8_dotOut
13I/O1529汎用IOPOSTDATA[1]LED1Out13I/O83119汎用IOLADCOM[3]In
14I/O1630汎用IOPOSTDATA[0]LED0Out14I/O82118汎用IOLADCOM[2]In
15I/O1731汎用IOtxOut15I/O81113汎用IOLADCOM[1]In
16I/O1832汎用IOrxIn16I/O78112汎用IOLADCOM[0]In
17I/O1937汎用IO17I/O77111汎用IODSEL1Out
18I/O2038汎用IO18I/O76110汎用IODSEL2Out
19GND-19GND-
20GND-20GND-
21GND-21GND-
22GND-22GND-
23I/O2139汎用IO23I/O75104汎用IO7DLED1_AOut
24I/O2640汎用IO24I/O74103汎用IO7DLED2_BOut
25I/O2741汎用IO25I/O73102汎用IO7DLED3_COut
26I/O2842汎用IOSCKOut26I/O72101汎用IO7DLED4_DOut
27I/O2943汎用IO27I/O7198汎用IO7DLED5_EOut
28I/O3044汎用IO28I/O7097汎用IO7DLED6_FOut
29I/O3345汎用IO29I/O6996汎用IO7DLED7_GOut
30I/O3448汎用IO30I/O6895汎用IO7DLED8_dotOut
31I/O3549汎用IO31I/O6794汎用IO
32I/O3650汎用IO32I/O6693汎用IO
33I/O3751汎用IO33I6491入力専用端子
34I/O3852汎用IO34I6289入力専用端子
35I/O3953汎用IO35I/O6187汎用IOSEL1Out
36I/O4055汎用IOLCLKIn36I/O5886汎用IOSEL2Out
37GND-37GND-
38GND-38GND-
39I/O4157汎用IONFRAMESW1In39I/O5781汎用IOSEL3Out
40I/O4258汎用IO40I/O5680汎用IOSEL4Out
D4I/O10066汎用IOLEDENLED4Out4I/O144汎用IOSW4In
D3I/O9963汎用IOEN80LED3Out3I/O143汎用IOSW3In
D2I/O9862汎用IOWRCYCLED2Out2I/O142汎用IOSW2In
D1I/O9759汎用IONFRAMELED1Out1I/O144汎用IOSW1In

1-2-2.ピン一覧_CPLD

CLKInputPIN_551PIN_553.3-V LVCMOS8mA (default)
COMOUT[3]OutputPIN_1443.3-V LVCMOS (default)8mA (default)
COMOUT[2]OutputPIN_763.3-V LVCMOS (default)8mA (default)
COMOUT[1]OutputPIN_23.3-V LVCMOS (default)8mA (default)
COMOUT[0]OutputPIN_493.3-V LVCMOS (default)8mA (default)
CS_COUNTER[4]OutputPIN_513.3-V LVCMOS (default)8mA (default)
CS_COUNTER[3]OutputPIN_533.3-V LVCMOS (default)8mA (default)
CS_COUNTER[2]OutputPIN_503.3-V LVCMOS (default)8mA (default)
CS_COUNTER[1]OutputPIN_583.3-V LVCMOS (default)8mA (default)
CS_COUNTER[0]OutputPIN_613.3-V LVCMOS (default)8mA (default)
DSEL[2]OutputPIN_1102PIN_1103.3-V LVCMOS8mA (default)
DSEL[1]OutputPIN_1112PIN_1113.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[7]OutputPIN_952PIN_953.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[6]OutputPIN_962PIN_963.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[5]OutputPIN_972PIN_973.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[4]OutputPIN_982PIN_983.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[3]OutputPIN_1012PIN_1013.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[2]OutputPIN_1022PIN_1023.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[1]OutputPIN_1032PIN_1033.3-V LVCMOS8mA (default)
DSEVEN_SEG_DATA[0]OutputPIN_1042PIN_1043.3-V LVCMOS8mA (default)
EN80OutputPIN_661PIN_663.3-V LVCMOS8mA (default)
LADCOM[3]InputPIN_1192PIN_1193.3-V LVCMOS8mA (default)
LADCOM[2]InputPIN_1182PIN_1183.3-V LVCMOS8mA (default)
LADCOM[1]InputPIN_1132PIN_1133.3-V LVCMOS8mA (default)
LADCOM[0]InputPIN_1122PIN_1123.3-V LVCMOS8mA (default)
LEDENOutputPIN_631PIN_633.3-V LVCMOS8mA (default)
NFRAMEOutputPIN_591PIN_593.3-V LVCMOS8mA (default)
NISAIOWROutputPIN_603.3-V LVCMOS (default)8mA (default)
NRCOUNTER[16]OutputPIN_753.3-V LVCMOS (default)8mA (default)
NRCOUNTER[15]OutputPIN_393.3-V LVCMOS (default)8mA (default)
NRCOUNTER[14]OutputPIN_153.3-V LVCMOS (default)8mA (default)
NRCOUNTER[13]OutputPIN_523.3-V LVCMOS (default)8mA (default)
NRCOUNTER[12]OutputPIN_783.3-V LVCMOS (default)8mA (default)
NRCOUNTER[11]OutputPIN_143.3-V LVCMOS (default)8mA (default)
NRCOUNTER[10]OutputPIN_1173.3-V LVCMOS (default)8mA (default)
NRCOUNTER[9]OutputPIN_1313.3-V LVCMOS (default)8mA (default)
NRCOUNTER[8]OutputPIN_733.3-V LVCMOS (default)8mA (default)
NRCOUNTER[7]OutputPIN_1433.3-V LVCMOS (default)8mA (default)
NRCOUNTER[6]OutputPIN_43.3-V LVCMOS (default)8mA (default)
NRCOUNTER[5]OutputPIN_33.3-V LVCMOS (default)8mA (default)
NRCOUNTER[4]OutputPIN_163.3-V LVCMOS (default)8mA (default)
NRCOUNTER[3]OutputPIN_53.3-V LVCMOS (default)8mA (default)
NRCOUNTER[2]OutputPIN_883.3-V LVCMOS (default)8mA (default)
NRCOUNTER[1]OutputPIN_723.3-V LVCMOS (default)8mA (default)
NRCOUNTER[0]OutputPIN_453.3-V LVCMOS (default)8mA (default)
NSCKOutputPIN_443.3-V LVCMOS (default)8mA (default)
POSTDATA[7]OutputPIN_211PIN_213.3-V LVCMOS8mA (default)
POSTDATA[6]OutputPIN_221PIN_223.3-V LVCMOS8mA (default)
POSTDATA[5]OutputPIN_231PIN_233.3-V LVCMOS8mA (default)
POSTDATA[4]OutputPIN_241PIN_243.3-V LVCMOS8mA (default)
POSTDATA[3]OutputPIN_271PIN_273.3-V LVCMOS8mA (default)
POSTDATA[2]OutputPIN_281PIN_283.3-V LVCMOS8mA (default)
POSTDATA[1]OutputPIN_291PIN_293.3-V LVCMOS8mA (default)
POSTDATA[0]OutputPIN_301PIN_303.3-V LVCMOS8mA (default)
RSTInputPIN_201PIN_203.3-V LVCMOS8mA (default)
RXDInputPIN_321PIN_323.3-V LVCMOS8mA (default)
SCKOutputPIN_421PIN_423.3-V LVCMOS8mA (default)
SCK2OutputPIN_1063.3-V LVCMOS (default)8mA (default)
SEL[4]OutputPIN_802PIN_803.3-V LVCMOS8mA (default)
SEL[3]OutputPIN_812PIN_813.3-V LVCMOS8mA (default)
SEL[2]OutputPIN_862PIN_863.3-V LVCMOS8mA (default)
SEL[1]OutputPIN_872PIN_873.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[7]OutputPIN_1202PIN_1203.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[6]OutputPIN_1212PIN_1213.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[5]OutputPIN_1222PIN_1223.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[4]OutputPIN_1252PIN_1253.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[3]OutputPIN_1272PIN_1273.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[2]OutputPIN_1292PIN_1293.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[1]OutputPIN_1322PIN_1323.3-V LVCMOS8mA (default)
SEVEN_SEG_DATA[0]OutputPIN_1332PIN_1333.3-V LVCMOS8mA (default)
SW1InputPIN_571PIN_573.3-V LVCMOS8mA (default)
TXDOutputPIN_311PIN_313.3-V LVCMOS8mA (default)
WRCYCOutputPIN_621PIN_623.3-V LVCMOS8mA (default)


1-3.ソースコード

   module LPC_PORT80h_translator1(
CLK, //standard clock
RST,//RST Input
LADCOM,//LAD Input,
SW1,//Manual Input or NFRAME
NRCOUNTER,
NFRAME,
COMOUT,
SCK,
NSCK,
SCK2,
WRCYC,
SEVEN_SEG_DATA,
SEL,
DSEL,
DSEVEN_SEG_DATA,
CS_COUNTER,
POSTDATA,
EN80,
NISAIOWR,
LEDEN,
TXD,
RXD

	);
	
// input definition//
	input CLK;
	input RST;
	input[3:0] LADCOM;
	input SW1;//Manual Input or NFRAME
//output definition//
	output[16:0] NRCOUNTER;
	output NFRAME;
	output SCK;
	output NSCK;
	output  SCK2;
	output[3:0] COMOUT;
	output reg WRCYC; 
	output [4:1] SEL;
	output reg[7:0] SEVEN_SEG_DATA;
  output [2:1] DSEL;
	output reg[7:0] DSEVEN_SEG_DATA;
	output [4:0] CS_COUNTER;
	output[7:0] POSTDATA;
	output EN80;
	output NISAIOWR;
	output LEDEN;
	output TXD;
	input RXD;
 	
// register//
  reg nframe;
	reg [24:0] sec_cnt ;
  reg  sec1_flag ;//1秒のフラグ
  reg  toggle_flag ; //1秒ごとにトグルするフラグ
	reg [24:0] sec_cnt2 ;
  reg  sec1_flag2 ;//1秒のフラグ
  reg  toggle_flag2 ; //1秒ごとにトグルするフラグ
	reg sw1;
	reg[5:0]  sw1_counter;
	reg[16:0] rcounter_reg;
	reg[16:0] rcounter;
	reg[16:0] cn;
	reg[16:0] cnp;
	reg[3:0] com_reg;
	wire[3:0] COMOUT;
	reg Wrcyc;
	reg[7:0] seven_seg1_hold;
	reg[7:0] seven_seg2_hold;
	reg[7:0] seven_seg3_hold;
	reg[7:0] seven_seg4_hold;
	reg[7:0] seven_seg_data;
	reg[4:1]sel;
	reg[1:0]enable_seg;
	reg[2:1]dsel;
	reg denable_seg;
	reg[7:0] dseven_seg1_hold;
	reg[7:0] dseven_seg2_hold;
	reg[4:0] cs_counter;
 	reg[3:0] ad1;
  reg[3:0] ad2;
	reg[3:0] ad3;
	reg[3:0] ad4;
	reg[15:0] ad;
	reg en80;
	reg[3:0] ld1;
	reg[3:0] ld2;
	reg[7:0] ld;
	reg startflag;
	reg startflagen;
	reg nisaiowr;
	reg leden;
  wire TXD;
//Serial I/F resister below//	
reg[10:0] CLK_COUNT;
wire SHIFT_CLK;

reg SEND_SW0;
reg SEND_SW1;
reg SEND_START;

reg[8:0] SEND_REG;
reg[3:0] SEND_BITCNT;
reg SEND_ACTIVE;
reg shift_flag1;
reg toggle_flag1;

 //***parameter definition***//
// parameter   F40M0000_cnt2=24'h000001 ; //0.00000025sec interval
 parameter F40M0000_cnt2=24'h000FA0 ; //0.0005sec interval9600bps
 parameter	selinit_value = 4'b0001	;
 parameter dselinit_value =2'b01;
 parameter sw1init_value =1'b1;
 parameter ld1init_value =4'b1111;
  parameter ld2init_value =4'b1111;
 parameter rcounter_reg_init_value = 17'b00000000000000001;
 initial	cs_counter = 5'b00000;
 initial   nframe <= 1'b1 ;
 
//Serial CLOCK//
// parameter F10M0000_value=11'b01000001000;//208h 9600bps
   parameter F10M0000_value=11'b00000101011;//2bh 115.2kbps
 initial CLK_COUNT = 11'b0000000000;  
 initial toggle_flag1 = 1'b0;
 
//***CLK Monitoring Out***//
assign SCK = CLK;
assign NSCK =!CLK;

//***7seg Dynamic lighting SCK2 generation***//
always@(posedge CLK)
begin
  if(sec_cnt2 == F40M0000_cnt2) begin
	  sec_cnt2 <= 24'h000000 ; //counter counting up to the parameter(refer to No 52th row)
	  sec1_flag2 <= 1'b1; 
	end else begin
	  sec_cnt2 <= sec_cnt2 + 1 ;
	  sec1_flag2 <= 1'b0 ;
	end
end

always@(posedge CLK)
begin
  if(sec1_flag2 == 1'b1 )begin
	 toggle_flag2 <= !toggle_flag2 ;
	end
end

assign SCK2 =!toggle_flag2;
//***end***//

always@(posedge NSCK or negedge RST)
begin
if(RST ==1'b0)begin
sw1_counter <= 5'b00000;
end else begin
sw1_counter <= sw1_counter +1'b1;
end
end

always@(SW1)
begin
if(RST ==1'b0)begin
sw1 <= 1'b1;
end else if(CLK ==1'b1)begin
sw1 <=SW1;
//nframe <= sw1;
end
end

assign NFRAME = ~nframe;

// ***RING COUNTER***//
always@(posedge CLK or negedge RST  or posedge nframe)
begin
  if(RST == 1'b0 ) begin
	   rcounter_reg <= 16'h0 ;
	end else if(nframe ==1'b1)begin//1'b1
	   rcounter_reg <= 16'h0 ;
	end else begin
	    rcounter_reg <=  rcounter_reg <<1;
		 rcounter_reg [0] <= rcounter[16];
	end
end

always@*
begin
      rcounter[16] <= ~|rcounter_reg;//16
		 rcounter[15:0]<=rcounter_reg;
		 cn<=~rcounter_reg;
		 cnp<=~cn;
end
  
//   assign NRCOUNTER = cn;

// always@(posedge NSCK or  negedge RST )//SCK
  always@(posedge CLK or  negedge RST or negedge SW1)//SCK
 begin
  if(RST == 1'b0 )begin
	   cs_counter<= 5'b00000;
	end else if(SW1 == 1'b0)begin	
		cs_counter <=5'b00000;
  end else if(cs_counter > 5'b10001)begin
  cs_counter <=5'b00000;
	end else begin
   cs_counter <= cs_counter +1'b1;
	end
end

 always@*
 begin
 if(RST == 1'b0)begin
   nframe<= 1'b1;
 end else if(SW1 ==1'b0)begin
  nframe <= 1'b1;
 end else if(cs_counter >5'b01011)begin//1101
  nframe <=1'b1;
 end else begin
  nframe <=1'b0;
 end
 end
 
 
 
 
 assign CS_COUNTER = cs_counter;
 
always@(negedge RST or posedge CLK)
begin
if(RST == 1'b0)begin
  startflag <=1'b0;
end else if(SW1 == 1'b0) 
begin
  if(LADCOM[3:0] == 4'b0000)
	 startflag <= 1'b1;
end else begin
   startflag <= 1'b0;
	end
end

 always@(negedge RST or posedge SW1)
begin
if(RST == 1'b0)begin
  startflagen <=1'b0;
end else if(startflag ==1'b0) 
begin
	 startflagen <= 1'b0;
end else begin
   startflagen <= 1'b1;
	end
end

 
always@( negedge RST or negedge SW1 or posedge LADCOM[3:0] or  posedge CLK or posedge startflag )//negedge SCK or negedge cn[0]
begin if(RST ==1'b0)begin
 com_reg <=1'b0;
    end else if(startflag ==1'b1 )begin
  // if(SCK ==1'b1)
	  	case(LADCOM)
	4'b0000 : com_reg<= 1'b0; //'0'
	4'b0001 : com_reg <= 1'b0; //'1'
	4'b0010 : com_reg <= 1'b1; //'1'
	4'b0011 : com_reg<= 1'b0; //'0'
	4'b0100 : com_reg<= 1'b0 ; //'0'
	4'b0101 : com_reg <= 1'b0; //'1'
	4'b0110 : com_reg<= 1'b0; //'0'
	4'b0111 : com_reg<= 1'b0 ; //'0'
	4'b1000 : com_reg<= 1'b0 ; //'0'
	4'b1001 : com_reg <= 1'b0; //'1'
	4'b1010 : com_reg<= 1'b0; //'0'
	4'b1011 : com_reg<= 1'b0 ; //'0'
	4'b1100 : com_reg<= 1'b0 ; //'0'
	4'b1101 : com_reg<= 1'b0 ; //'0'
	4'b1110 : com_reg <= 1'b0; //'1'
	4'b1111 : com_reg<= 1'b0; //'0'
	default: com_reg<= 1'b0 ; //'0'
	endcase
	end
	end
   
   assign COMOUT =com_reg;
	 
	 always@( negedge RST or negedge SW1 or posedge LADCOM[3:0] or  posedge CLK or posedge startflag)//negedge SCK or negedge cn[0]
begin if(RST ==1'b0)begin
 Wrcyc <=1'b0;
    end else if(startflag ==1'b1 )begin
   //if(SCK ==1'b1)
	  	case(LADCOM)
	4'b0000 : Wrcyc<= 1'b0; //'0'
	4'b0001 : Wrcyc <= 1'b0; //'1'
	4'b0010 : Wrcyc <= 1'b1; //'1'
	4'b0011 : Wrcyc<= 1'b0; //'0'
	4'b0100 : Wrcyc<= 1'b0 ; //'0'
	4'b0101 : Wrcyc <= 1'b0; //'1'
	4'b0110 : Wrcyc<= 1'b0; //'0'
	4'b0111 : Wrcyc<= 1'b0 ; //'0'
	4'b1000 : Wrcyc<= 1'b0 ; //'0'
	4'b1001 : Wrcyc <= 1'b0; //'1'
	4'b1010 : Wrcyc<= 1'b0; //'0'
	4'b1011 : Wrcyc<= 1'b0 ; //'0'
	4'b1100 : Wrcyc<= 1'b0 ; //'0'
	4'b1101 : Wrcyc<= 1'b0 ; //'0'
	4'b1110 : Wrcyc <= 1'b0; //'1'
	4'b1111 : Wrcyc<= 1'b0; //'0'
	default: Wrcyc<= 1'b0 ; //'0'
	endcase
	end
	end

	always@(posedge Wrcyc or negedge SW1)
	begin if(SW1 ==1'b0)begin
	WRCYC <=1'b0;
	end else begin
	WRCYC <= ~nframe;
	end
	end

 	always@(negedge RST or posedge cn[5] or negedge cn[9])
	begin if(RST ==1'b0)begin
	nisaiowr <=1'b1;
	end else if(cn[9] ==1'b0)begin
	nisaiowr <=1'b1;
	end else if(cn[5] == 1'b1)begin
	nisaiowr <=1'b0;
	end
	end
	assign NISAIOWR = nisaiowr ; 
		
  always@(posedge SCK2 or  negedge RST)begin
  if(RST == 1'b0 )begin
	  sel <= selinit_value;
	  end else begin
   sel[4] <= sel[1]	;	//シフト動作を開始する
 sel[3] <= sel[4]	;	//シフト動作を開始する
 sel[2] <= sel[3]	;	//シフト動作を開始する
 sel[1] <= sel[2]	;
   end
end

assign SEL[4:1] = ~sel[4:1];

always@(negedge RST or posedge CLK or posedge leden)//posedge cnp[0]
 //*  always@(negedge SW1 or  negedge RST or posedge CLK or posedge LADCOM[3:0] or negedge cn[1] or posedge SCK)
begin if(RST ==1'b0)begin
 seven_seg1_hold <=8'b00000110;
  end else if(leden==1'b1 )begin//cnp[0]==1'b1
  //  if(SCK ==1'b1&& WRCYC==1'b1 && startflagen ==1'b1)
	 //if( WRCYC==1'b1)
	  	case(ad1)//LADCOM
	4'b0000 : seven_seg1_hold<= 8'b00111111 ; //'0'    dot   g   f    e    d    c    b    a
	4'b0001 : seven_seg1_hold <= 8'b00000110 ; //'1'
	4'b0010 :seven_seg1_hold<= 8'b01011011 ; //'2'
	4'b0011 : seven_seg1_hold <= 8'b01001111 ; //'3'
	4'b0100 : seven_seg1_hold <= 8'b01100110 ; //'4'
	4'b0101 : seven_seg1_hold <= 8'b01101101 ; //'5'
	4'b0110 : seven_seg1_hold <= 8'b01111101 ; //'6'
	4'b0111 : seven_seg1_hold <= 8'b00100111 ; //'7'
	4'b1000 : seven_seg1_hold <= 8'b01111111 ; //'8'
	4'b1001 : seven_seg1_hold <= 8'b01101111 ; //'9'
	4'b1010 : seven_seg1_hold <= 8'b01110111 ; //'A'
	4'b1011 : seven_seg1_hold <= 8'b01111100 ; //'b'
	4'b1100 : seven_seg1_hold <= 8'b01011000 ; //'c'
	4'b1101 : seven_seg1_hold <= 8'b01011110 ; //'d'
	4'b1110 : seven_seg1_hold <= 8'b01111001 ; //'E'
	4'b1111 : seven_seg1_hold <= 8'b01110001 ; //'F'
	default: seven_seg1_hold <= 8'b01110001;
	endcase
	end
	end
	
always@(negedge RST or posedge CLK or posedge leden)//posedge cnp[1]
//always@(negedge SW1 or  negedge RST or posedge CLK or posedge LADCOM[3:0] or negedge cn[2] or posedge SCK)
begin if(RST ==1'b0)begin
  seven_seg2_hold <=8'b01011011;
  end else if(leden==1'b1)begin//cnp[1]==1'b1
    //if(WRCYC==1'b1)
		  	case(ad2)
	4'b0000 : seven_seg2_hold<= 8'b00111111 ; //'0
	4'b0001 : seven_seg2_hold <= 8'b00000110 ; //'1'
	4'b0010 :seven_seg2_hold<= 8'b01011011 ; //'2'
	4'b0011 : seven_seg2_hold <= 8'b01001111 ; //'3'
	4'b0100 : seven_seg2_hold <= 8'b01100110 ; //'4'
	4'b0101 : seven_seg2_hold <= 8'b01101101 ; //'5'
	4'b0110 : seven_seg2_hold <= 8'b01111101 ; //'6'
	4'b0111 : seven_seg2_hold <= 8'b00100111 ; //'7'
	4'b1000 : seven_seg2_hold <= 8'b01111111 ; //'8'
	4'b1001 : seven_seg2_hold <= 8'b01101111 ; //'9'
	4'b1010 : seven_seg2_hold <= 8'b01110111 ; //'A'
	4'b1011 : seven_seg2_hold <= 8'b01111100 ; //'b'
	4'b1100 : seven_seg2_hold <= 8'b01011000 ; //'c'
	4'b1101 : seven_seg2_hold <= 8'b01011110 ; //'d'
	4'b1110 : seven_seg2_hold <= 8'b01111001 ; //'E'
	4'b1111 : seven_seg2_hold <= 8'b01110001 ; //'F'
	 default: seven_seg2_hold <= 8'b01110001;
	endcase
	end
	end
	
always@(negedge RST or posedge CLK or posedge leden)//posedge cnp[2]
//always@(negedge SW1 or  negedge RST or posedge CLK or posedge LADCOM[3:0] or negedge cn[3] or posedge SCK)
begin if(RST ==1'b0)begin
  seven_seg3_hold <=8'b01001111;
  end else if(leden==1'b1)begin
    //if(WRCYC==1'b1)
	case(ad3)
	4'b0000 : seven_seg3_hold<= 8'b00111111 ; //'0'
	4'b0001 : seven_seg3_hold <= 8'b00000110 ; //'1'
	4'b0010 :seven_seg3_hold<= 8'b01011011 ; //'2'
	4'b0011 : seven_seg3_hold <= 8'b01001111 ; //'3'
	4'b0100 : seven_seg3_hold <= 8'b01100110 ; //'4'
	4'b0101 : seven_seg3_hold <= 8'b01101101 ; //'5'
	4'b0110 : seven_seg3_hold <= 8'b01111101 ; //'6'
	4'b0111 : seven_seg3_hold <= 8'b00100111 ; //'7'
	4'b1000 : seven_seg3_hold <= 8'b01111111 ; //'8'
	4'b1001 : seven_seg3_hold <= 8'b01101111 ; //'9'
	4'b1010 : seven_seg3_hold <= 8'b01110111 ; //'A'
	4'b1011 : seven_seg3_hold <= 8'b01111100 ; //'b'
	4'b1100 : seven_seg3_hold <= 8'b01011000 ; //'c'
	4'b1101 : seven_seg3_hold <= 8'b01011110 ; //'d'
	4'b1110 : seven_seg3_hold <= 8'b01111001 ; //'E'
	4'b1111 : seven_seg3_hold <= 8'b01110001 ; //'F'
  default: seven_seg3_hold <= 8'b01110001;
	endcase
	end
	end

always@(negedge RST or posedge CLK or posedge leden)	
//always@(negedge SW1 or  negedge RST or posedge CLK or posedge LADCOM[3:0] or negedge cn[4] or posedge SCK)
begin if(RST ==1'b0)begin
 seven_seg4_hold <=8'b01100110;
 end else if(leden==1'b1)begin
   // if(WRCYC==1'b1)
	 	case(ad4)
	4'b0000 : seven_seg4_hold<= 8'b00111111 ; //'0'
	4'b0001 : seven_seg4_hold <= 8'b00000110 ; //'1'
	4'b0010 :seven_seg4_hold<= 8'b01011011 ; //'2'
	4'b0011 : seven_seg4_hold <= 8'b01001111 ; //'3'
	4'b0100 : seven_seg4_hold <= 8'b01100110 ; //'4'
	4'b0101 : seven_seg4_hold <= 8'b01101101 ; //'5'
	4'b0110 : seven_seg4_hold <= 8'b01111101 ; //'6'
	4'b0111 : seven_seg4_hold <= 8'b00100111 ; //'7'
	4'b1000 : seven_seg4_hold <= 8'b01111111 ; //'8'
	4'b1001 : seven_seg4_hold <= 8'b01101111 ; //'9'
	4'b1010 : seven_seg4_hold <= 8'b01110111 ; //'A'
	4'b1011 : seven_seg4_hold <= 8'b01111100 ; //'b'
	4'b1100 : seven_seg4_hold <= 8'b01011000 ; //'c'
	4'b1101 : seven_seg4_hold <= 8'b01011110 ; //'d'
	4'b1110 : seven_seg4_hold <= 8'b01111001 ; //'E'
	4'b1111 : seven_seg4_hold <= 8'b01110001 ; //'F'
	  default: seven_seg4_hold <= 8'b01110001;
	endcase
end
end

always@(negedge RST or posedge CLK or posedge cnp[0])
begin if(RST ==1'b0)begin
  ad1 <=4'b0000;
  end else if(cnp[0]==1'b1)begin
    if(WRCYC==1'b1)
  ad1 <= LADCOM;
end
end

always@(negedge RST or posedge CLK or posedge cnp[1])
begin if(RST ==1'b0)begin
  ad2 <=4'b0000;
  end else if(cnp[1]==1'b1)begin
    if(WRCYC==1'b1)
  ad2 <= LADCOM;
end
end

always@(negedge RST or posedge CLK or posedge cnp[2])
begin if(RST ==1'b0)begin
  ad3 <=4'b0000;
  end else if(cnp[2]==1'b1)begin
    if(WRCYC==1'b1)
  ad3 <= LADCOM;
end
end

always@(negedge RST or posedge CLK or posedge cnp[3])
begin if(RST ==1'b0)begin
  ad4 <=4'b0000;
  end else if(cnp[3]==1'b1)begin
    if(WRCYC==1'b1)
  ad4 <= LADCOM;
end
end


 always@(negedge RST or posedge CLK or posedge cnp[4])
begin if(RST ==1'b0)begin
  ad <=16'h0000;
  end else if(cnp[4]==1'b1)begin
    if(WRCYC==1'b1)
  ad <={ad1,ad2,ad3,ad4};
end
end


always@(negedge RST or posedge CLK or posedge cnp[5])
begin if(RST ==1'b0)begin
  ld1 <=4'b0000;
  end else if(cnp[5]==1'b1)begin
    if(WRCYC==1'b1)
  ld1 <= LADCOM;
end
end

always@(negedge RST or posedge CLK or posedge cnp[4])
begin if(RST ==1'b0)begin
  ld2 <=4'b0000;
  end else if(cnp[4]==1'b1)begin
    if(WRCYC==1'b1 )
  ld2 <=LADCOM;
end
end

 always@(negedge RST or posedge CLK or posedge leden)//posedge cnp[5]
begin if(RST ==1'b0)begin
  ld <=8'b00000000;
  end else if(leden ==1'b1)begin
  ld <={ld1,ld2};
end
end

assign POSTDATA = ld;

always@(negedge RST or negedge SW1 or negedge cn[7])
 begin if(RST ==1'b0)begin
  en80 <=1'b0;
	end else if(SW1==1'b0)begin
	en80 <=1'b0;
  end else if(WRCYC==1'b1 && ad == 16'h0080)begin
  en80<=1'b1;
	end else begin
	en80<=1'b0;
end
end

assign EN80 = ~en80;

always@(negedge en80 or posedge CLK or posedge ad[0] or posedge nisaiowr)
 begin if(en80 ==1'b0)begin
 leden <=1'b0;
 end else if(ad[0] ==1'b1)begin
 leden <=1'b0;
 end else if(nisaiowr ==1'b1)begin
 leden <=1'b0;
 end else begin
 leden <=1'b1;
 end
 end

assign LEDEN = ~leden;

  
  always@(posedge SCK2 or  negedge RST)begin
  if(RST == 1'b0 )begin
	  enable_seg <= 2'b00;
 end else begin
   enable_seg <= enable_seg +1'b1;
	end
end
 
 always@* //* whenever inputs change,  holding counter value as the resister "SEVEN_SEG_DATA"
 begin
 case(enable_seg)
	2'b00:  SEVEN_SEG_DATA <= ~seven_seg4_hold;
	2'b01:  SEVEN_SEG_DATA<=~seven_seg1_hold;
  2'b10:  SEVEN_SEG_DATA<=~seven_seg2_hold;
  2'b11:  SEVEN_SEG_DATA<=~seven_seg3_hold;
	default SEVEN_SEG_DATA<=8'b11111111;
		endcase
	end
 
 always@(negedge RST or posedge SCK2)
	 begin if(RST == 1'b0 )begin
	  dsel <= dselinit_value;
	  end else begin
    dsel[2]<=dsel[1]	;	//シフト動作を開始する
    dsel[1] <= dsel[2]	;	//シフト動作を開始する
   end
end
 
 assign DSEL[2:1] =~dsel[2:1];

//always@(negedge RST or posedge en80)	//cn6
// always@(negedge SW1 or  negedge RST or posedge CLK or posedge LADCOM[3:0] or negedge cn[5] or posedge SCK)
always@(negedge RST or posedge leden or posedge CLK)
begin if(RST ==1'b0)begin
 dseven_seg1_hold <=8'b01011011;
 end else if(leden == 1'b1 )begin//en80
  //   if(SCK ==1'b1 && WRCYC==1'b1 && startflagen ==1'b1 )
	  	case(ld2)//LADCOM
	4'b0000 : dseven_seg1_hold<= 8'b00111111 ; //'0'    dot   g   f    e    d    c    b    a
	4'b0001 : dseven_seg1_hold <= 8'b00000110 ; //'1'
	4'b0010 : dseven_seg1_hold<= 8'b01011011 ; //'2'
	4'b0011 : dseven_seg1_hold <= 8'b01001111 ; //'3'
	4'b0100 : dseven_seg1_hold <= 8'b01100110 ; //'4'
	4'b0101 : dseven_seg1_hold <= 8'b01101101 ; //'5'
	4'b0110 : dseven_seg1_hold <= 8'b01111101 ; //'6'
	4'b0111 : dseven_seg1_hold <= 8'b00100111 ; //'7'
	4'b1000 : dseven_seg1_hold <= 8'b01111111 ; //'8'
	4'b1001 : dseven_seg1_hold <= 8'b01101111 ; //'9'
	4'b1010 : dseven_seg1_hold <= 8'b01110111 ; //'A'
	4'b1011 : dseven_seg1_hold <= 8'b01111100 ; //'b'
	4'b1100 : dseven_seg1_hold <= 8'b01011000 ; //'c'
	4'b1101 : dseven_seg1_hold <= 8'b01011110 ; //'d'
	4'b1110 : dseven_seg1_hold <= 8'b01111001 ; //'E'
	4'b1111 : dseven_seg1_hold <= 8'b01110001 ; //'F'
	default: dseven_seg1_hold <= 8'b01110001;
	endcase
	end
	end
	
 //always@(negedge RST or posedge en80)	//5
//always@(negedge SW1 or  negedge RST or posedge CLK or posedge LADCOM[3:0] or negedge cn[6] or posedge SCK)
always@(negedge RST or posedge leden or posedge CLK)
begin if(RST ==1'b0)begin
dseven_seg2_hold <=8'b00000110;
 end else if(leden == 1'b1)begin//en80
 //   if(SCK ==1'b1 && WRCYC==1'b1 && startflagen ==1'b1)
		  	case(ld1)
	4'b0000 : dseven_seg2_hold<= 8'b00111111 ; //'0
	4'b0001 : dseven_seg2_hold <= 8'b00000110 ; //'1'
	4'b0010 : dseven_seg2_hold<= 8'b01011011 ; //'2'
	4'b0011 : dseven_seg2_hold <= 8'b01001111 ; //'3'
	4'b0100 : dseven_seg2_hold <= 8'b01100110 ; //'4'
	4'b0101 : dseven_seg2_hold <= 8'b01101101 ; //'5'
	4'b0110 : dseven_seg2_hold <= 8'b01111101 ; //'6'
	4'b0111 : dseven_seg2_hold <= 8'b00100111 ; //'7'
	4'b1000 : dseven_seg2_hold <= 8'b01111111 ; //'8'
	4'b1001 : dseven_seg2_hold <= 8'b01101111 ; //'9'
	4'b1010 : dseven_seg2_hold <= 8'b01110111 ; //'A'
	4'b1011 : dseven_seg2_hold <= 8'b01111100 ; //'b'
	4'b1100 : dseven_seg2_hold <= 8'b01011000 ; //'c'
	4'b1101 : dseven_seg2_hold <= 8'b01011110 ; //'d'
	4'b1110 : dseven_seg2_hold <= 8'b01111001 ; //'E'
	4'b1111 : dseven_seg2_hold <= 8'b01110001 ; //'F'
	 default: dseven_seg2_hold <= 8'b01110001;
	endcase
	end
	end
	
  always@(posedge SCK2 or  negedge RST)begin
  if(RST == 1'b0 )begin
	  denable_seg <= 1'b0;
 end else begin
    denable_seg <= denable_seg +1'b1;
	end
end

 always@* //* whenever inputs change,  holding counter value as the resister "SEVEN_SEG_DATA"
	begin
  case(denable_seg)
	1'b0:  DSEVEN_SEG_DATA <= ~dseven_seg2_hold;
	1'b1:  DSEVEN_SEG_DATA<=~dseven_seg1_hold;
	default DSEVEN_SEG_DATA<=8'b11111111;
	endcase
	end
//	 assign SEVEN_SEG_DATA = seven_seg_data;


//Serial I/F below//
 always@(posedge CLK )
begin
if(CLK_COUNT == F10M0000_value)
begin //1A0
  CLK_COUNT <= 11'b0000000000;
	shift_flag1 <= 1'b1;
end else begin
  CLK_COUNT <= CLK_COUNT + 1;
	shift_flag1 <= 1'b0;
 end 
end

always@(posedge CLK)
begin
if(shift_flag1 == 1'b1)begin
toggle_flag1 <= !toggle_flag1;
end
end

assign SHIFT_CLK = !toggle_flag1;

always@(posedge SHIFT_CLK or negedge RST)
begin
 if(RST == 1'b0)begin
   SEND_START <= 1'b0 ;
	 SEND_SW1 <= 1'b0;
	 SEND_SW0 <= 1'b0;
	 	 
 end else begin
   if(SEND_SW1 == 1'b0 & SEND_SW0 == 1'b1)begin
	 SEND_START <= 1'b1;
 end else begin
   SEND_START <= 1'b0;
 end
   SEND_SW1 <= SEND_SW0;
	 SEND_SW0 <= LEDEN;
 end
end
always@(posedge SHIFT_CLK or negedge RST)
begin
if(RST == 1'b0)begin

SEND_REG <= 9'b111111111;
SEND_BITCNT <= 4'b0000;
SEND_ACTIVE <= 1'b0;

end else begin

 if(SEND_ACTIVE == 1'b0)begin
  if(SEND_START == 1'b1)begin
	 SEND_REG[8:1] <= ld;//8'b01000001;  //41h(LSB first)
	 
	 SEND_REG[0] <= 1'b0;
	 SEND_BITCNT <= 4'b0000;
	 SEND_ACTIVE <= 1'b1;
	end
 end else begin
  SEND_REG[8] <= 1'b1;
	SEND_REG[7:0] <= SEND_REG[8:1];
	if(SEND_BITCNT == 4'b1001)begin
	
	SEND_ACTIVE <= 1'b0;
	end else begin
	 SEND_BITCNT <= SEND_BITCNT + 1;
	end
end
end
end
 
  assign TXD = SEND_REG[0];
 
	 
endmodule

 

1-4.テストベンチコード

`timescale 1 ns/ 1 ns
module LPC_PORT80h_translator1_vlg_tst();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg CLK;
reg [3:0] LADCOM;
reg RST;
reg SW1;
reg RXD;
// wires                                               
wire [3:0]  COMOUT;
wire [4:0]  CS_COUNTER;
wire [2:1]  DSEL;
wire [7:0]  DSEVEN_SEG_DATA;
wire NFRAME;
wire [16:0]  NRCOUNTER;
wire NSCK;
wire SCK;
wire SCK2;
wire [4:1]  SEL;
wire [7:0]  SEVEN_SEG_DATA;
wire WRCYC;
wire [7:0] POSTDATA;
wire TXD;

parameter STEP1 = 500;    // ns
parameter STEP2 = 10;	//ns  33MHz
 
// assign statements (if any)                          
LPC_PORT80h_translator1 i1 (
// port map - connection between master ports and signals/registers   
	.CLK(CLK),
	.COMOUT(COMOUT),
	.CS_COUNTER(CS_COUNTER),
	.DSEL(DSEL),
	.DSEVEN_SEG_DATA(DSEVEN_SEG_DATA),
	.LADCOM(LADCOM),
	.NFRAME(NFRAME),
	.NRCOUNTER(NRCOUNTER),
	.NSCK(NSCK),
	.RST(RST),
	.SCK(SCK),
	.SCK2(SCK2),
	.SEL(SEL),
	.SEVEN_SEG_DATA(SEVEN_SEG_DATA),
	.SW1(SW1),
	.WRCYC(WRCYC),
	.POSTDATA(POSTDATA),
	.EN80(EN80),
	.NISAIOWR(NISAIOWR),
	.LEDEN(LEDEN),
	.TXD(TXD),
	.RXD(RXD)
);

initial                                                
begin           
RST <=1'b0;   
CLK <=1'b0; 
SW1 <= 1'b1;  
 //1

//RST deassert SW1(frame) assert  addr 80h data 5Ah
#0 LADCOM[3:0] <=4'b0000;  //1 start
#1 SW1 <= 1'b0;
#0 RST <= 1'b1;
#9 SW1 <=1'b1;
#0 LADCOM[3:0] <=4'b0010;  //    2 command
#10 LADCOM[3:0] <=4'b0000;//0x0  3 addr1
#10 LADCOM[3:0] <=4'b0000;//0x0  4 addr2
#10 LADCOM[3:0] <=4'b1000;//0x8  5 addr3
#10 LADCOM[3:0] <=4'b0000;//0x0  6 addr4
#10 LADCOM[3:0] <=4'b1010;//0xA  7 data1
#10 LADCOM[3:0] <=4'b0101;//0x5  8 data2
#10 LADCOM[3:0] <=4'b0001;//0x1  9 
#10 LADCOM[3:0] <=4'b0010;//0x2  10 
#10 LADCOM[3:0] <=4'b0100;//0x8  11
#10 LADCOM[3:0] <=4'b1111;//0xf  12
#10 LADCOM[3:0] <=4'b1101;//0xf  13
#10
//RST deassert SW1(frame) assert  addr f359h data 21h
#10 RST <= 1'b0;
#10 RST <= 1'b1;
#10 SW1 <= 1'b0;
#0 LADCOM[3:0] <=4'b0000;  //0x0   1
#10 SW1 <=1'b1;
#0 LADCOM[3:0] <=4'b0010;  //0x0   2
#10 LADCOM[3:0] <=4'b1111;//0xf    3 addr1
#10 LADCOM[3:0] <=4'b0011;//0x3    4 addr2
#10 LADCOM[3:0] <=4'b0101;//0x5    5 addr3
#10 LADCOM[3:0] <=4'b1001;//0x9    6 addr4
#10 LADCOM[3:0] <=4'b0000;//0x1    7 data1
#10 LADCOM[3:0] <=4'b0010;//0x2    8 data2
#10 LADCOM[3:0] <=4'b0001;//       9
#10 LADCOM[3:0] <=4'b0010;//      10 
#10 LADCOM[3:0] <=4'b0100;//      11
#10 LADCOM[3:0] <=4'b1111;//      12
 #10 LADCOM[3:0] <=4'b1101;//      13
 #10
 //SW1(frame) assert  addr 0081h data 76h
#10 SW1 <= 1'b0;
#0 LADCOM[3:0] <=4'b0000;  //1
#10 SW1 <=1'b1;
#0 LADCOM[3:0] <=4'b0000;  //0x0   command 0
#10 LADCOM[3:0] <=4'b0000;//0x1    addr1 0
#10 LADCOM[3:0] <=4'b1000;//0x2    addr2 8
#10 LADCOM[3:0] <=4'b0001;//0x4    addr3 1
#10 LADCOM[3:0] <=4'b1000;//0x8    addr4 6
#10 LADCOM[3:0] <=4'b0000;//0x1    data1 7
#10 LADCOM[3:0] <=4'b0010;//0x2    data2 8
#10 LADCOM[3:0] <=4'b0001;//       9
#10 LADCOM[3:0] <=4'b0010;//       10
#10 LADCOM[3:0] <=4'b0100;//       11
#10 LADCOM[3:0] <=4'b1111;//       12
#10 LADCOM[3:0] <=4'b1101;//       13
#10
  //SW1(frame) assert  addr 0080h data bah
#10 SW1 <= 1'b0;
#0 LADCOM[3:0] <=4'b0000;      //     1
#10 SW1 <=1'b1;
#0 LADCOM[3:0] <=4'b0010;  //0x2      2
#10 LADCOM[3:0] <=4'b0000;//0x0       3
#10 LADCOM[3:0] <=4'b0000;//0x0      4
#10 LADCOM[3:0] <=4'b1000;//0x8      5
#10 LADCOM[3:0] <=4'b0000;//0x0      6
#10 LADCOM[3:0] <=4'b1010;//0xa      7
#10 LADCOM[3:0] <=4'b1011;//0xb      8
#10 LADCOM[3:0] <=4'b1100;//0xc      9
#10 LADCOM[3:0] <=4'b1101;//0xd      10
#10 LADCOM[3:0] <=4'b1110;//0xe      11
#10 LADCOM[3:0] <=4'b1111;//0xf      12
#10 LADCOM[3:0] <=4'b1101;//0xf      13
// code that executes only once                        
// insert code here --> begin                          
                                                      
// --> end                                             
$display("Running testbench");                       
end  
                                                 
//always#(STEP1/2)
//begin
//RST <= ~RST;
//end

always#(STEP2/2)
begin
CLK <= ~CLK;
end                                           
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
//begin                                                  
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                                       
//@eachvec;                                              
// --> end                                             
//end     
                                               
endmodule