⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oc8051_sfr.v

📁 verilog code,about oc8051
💻 V
📖 第 1 页 / 共 2 页
字号:
			 .data_lo(dptr_lo), 			 .wr_sfr(wr_sfr));////program status word// PSWoc8051_psw oc8051_psw1 (.clk(clk),                         .rst(rst), 			.wr_addr(adr1), 			.data_in(dat1),			.wr(we), 			.wr_bit(wr_bit_r), 			.data_out(psw), 			.p(p), 			.cy_in(bit_in),			.ac_in(desAc), 			.ov_in(desOv), 			.set(psw_set), 			.bank_sel(bank_sel));//// ports// P0, P1, P2, P3`ifdef OC8051_PORTS  oc8051_ports oc8051_ports1(.clk(clk),                           .rst(rst),			   .bit_in(bit_in),			   .data_in(dat1),			   .wr(we),			   .wr_bit(wr_bit_r),			   .wr_addr(adr1),		`ifdef OC8051_PORT0			   .p0_out(p0_out),			   .p0_in(p0_in),			   .p0_data(p0_data),		`endif		`ifdef OC8051_PORT1			   .p1_out(p1_out),			   .p1_in(p1_in),			   .p1_data(p1_data),		`endif		`ifdef OC8051_PORT2			   .p2_out(p2_out),			   .p2_in(p2_in),			   .p2_data(p2_data),		`endif		`ifdef OC8051_PORT3			   .p3_out(p3_out),			   .p3_in(p3_in),			   .p3_data(p3_data),		`endif			   .rmw(rmw));`endif//// serial interface// SCON, SBUF`ifdef OC8051_UART  oc8051_uart oc8051_uatr1 (.clk(clk),                             .rst(rst), 			    .bit_in(bit_in),			    .data_in(dat1), 			    .wr(we), 			    .wr_bit(wr_bit_r), 			    .wr_addr(adr1),			    .rxd(rxd), 			    .txd(txd), 		// interrupt			    .intr(uart_int),		// baud rate sources			    .brate2(brate2),			    .t1_ow(tf1),			    .pres_ow(pres_ow),			    .rclk(rclk),			    .tclk(tclk),		//registers			    .scon(scon),			    .pcon(pcon),			    .sbuf(sbuf));`else  assign uart_int = 1'b0;`endif//// interrupt control// IP, IE, TCONoc8051_int oc8051_int1 (.clk(clk),                         .rst(rst), 			.wr_addr(adr1), 			.bit_in(bit_in),			.ack(int_ack), 			.data_in(dat1),			.wr(we), 			.wr_bit(wr_bit_r),			.tf0(tf0), 			.tf1(tf1), 			.t2_int(tc2_int), 			.tr0(tr0), 			.tr1(tr1),			.ie0(int0), 			.ie1(int1),			.uart_int(uart_int),			.reti(reti),			.intr(intr),			.int_vec(int_src),			.ie(ie),			.tcon(tcon), 			.ip(ip));//// timer/counter control// TH0, TH1, TL0, TH1, TMOD`ifdef OC8051_TC01  oc8051_tc oc8051_tc1(.clk(clk),                        .rst(rst), 		       .wr_addr(adr1),		       .data_in(dat1), 		       .wr(we), 		       .wr_bit(wr_bit_r), 		       .ie0(int0), 		       .ie1(int1), 		       .tr0(tr0),		       .tr1(tr1), 		       .t0(t0), 		       .t1(t1), 		       .tf0(tf0), 		       .tf1(tf1), 		       .pres_ow(pres_ow),		       .tmod(tmod), 		       .tl0(tl0), 		       .th0(th0), 		       .tl1(tl1), 		       .th1(th1));`else  assign tf0 = 1'b0;  assign tf1 = 1'b0;`endif//// timer/counter 2// TH2, TL2, RCAPL2L, RCAPL2H, T2CON`ifdef OC8051_TC2  oc8051_tc2 oc8051_tc21(.clk(clk),                          .rst(rst), 			 .wr_addr(adr1),			 .data_in(dat1), 			 .wr(we),			 .wr_bit(wr_bit_r), 			 .bit_in(bit_in), 			 .t2(t2), 			 .t2ex(t2ex),			 .rclk(rclk), 			 .tclk(tclk), 			 .brate2(brate2), 			 .tc2_int(tc2_int), 			 .pres_ow(pres_ow),			 .t2con(t2con), 			 .tl2(tl2), 			 .th2(th2), 			 .rcap2l(rcap2l), 			 .rcap2h(rcap2h));`else  assign tc2_int = 1'b0;  assign rclk    = 1'b0;  assign tclk    = 1'b0;  assign brate2  = 1'b0;`endifalways @(posedge clk or posedge rst)  if (rst) begin    adr0_r <= #1 8'h00;    ram_wr_sel_r <= #1 3'b000;    wr_bit_r <= #1 1'b0;//    wait_data <= #1 1'b0;  end else begin    adr0_r <= #1 adr0;    ram_wr_sel_r <= #1 ram_wr_sel;    wr_bit_r <= #1 wr_bit;  endassign comp_wait = !(                    ((comp_sel==`OC8051_CSS_AZ) &		       ((wr_sfr==`OC8051_WRS_ACC1) |		        (wr_sfr==`OC8051_WRS_ACC2) |			((adr1==`OC8051_SFR_ACC) & we & !wr_bit_r) |			((adr1[7:3]==`OC8051_SFR_B_ACC) & we & wr_bit_r))) |		    ((comp_sel==`OC8051_CSS_CY) &		       ((|psw_set) |			((adr1==`OC8051_SFR_PSW) & we & !wr_bit_r) |			((adr1[7:3]==`OC8051_SFR_B_PSW) & we & wr_bit_r))) |		    ((comp_sel==`OC8051_CSS_BIT) &		       ((adr1[7:3]==adr0[7:3]) & (~&adr1[2:0]) &  we & !wr_bit_r) |		       ((adr1==adr0) & adr1[7] & we & !wr_bit_r)));////set output in case of address (byte)always @(posedge clk or posedge rst)begin  if (rst) begin    dat0 <= #1 8'h00;    wait_data <= #1 1'b0;  end else if ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) begin				//write and read same address    dat0 <= #1 des_acc;    wait_data <= #1 1'b0;  end else if (      (        ((wr_sfr==`OC8051_WRS_ACC1) & (adr0==`OC8051_SFR_ACC)) | 	//write to acc//        ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) |	//write to dpl        (adr1[7] & (adr1==adr0) & we & !wr_bit_r) |			//write and read same address        (adr1[7] & (adr1[7:3]==adr0[7:3]) & (~&adr0[2:0]) &  we & wr_bit_r) //write bit addressable to read address      ) & !wait_data) begin    wait_data <= #1 1'b1;  end else if ((      ((|psw_set) & (adr0==`OC8051_SFR_PSW)) |      ((wr_sfr==`OC8051_WRS_ACC2) & (adr0==`OC8051_SFR_ACC)) | 	//write to acc      ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_HI))	//write to dph      ) & !wait_data) begin    wait_data <= #1 1'b1;  end else begin    case (adr0) /* synopsys full_case parallel_case */      `OC8051_SFR_ACC: 		dat0 <= #1 acc;      `OC8051_SFR_PSW: 		dat0 <= #1 psw;`ifdef OC8051_PORTS  `ifdef OC8051_PORT0      `OC8051_SFR_P0: 		dat0 <= #1 p0_data;  `endif  `ifdef OC8051_PORT1      `OC8051_SFR_P1: 		dat0 <= #1 p1_data;  `endif  `ifdef OC8051_PORT2      `OC8051_SFR_P2: 		dat0 <= #1 p2_data;  `endif  `ifdef OC8051_PORT3      `OC8051_SFR_P3: 		dat0 <= #1 p3_data;  `endif`endif      `OC8051_SFR_SP: 		dat0 <= #1 sp;      `OC8051_SFR_B: 		dat0 <= #1 b_reg;      `OC8051_SFR_DPTR_HI: 	dat0 <= #1 dptr_hi;      `OC8051_SFR_DPTR_LO: 	dat0 <= #1 dptr_lo;`ifdef OC8051_UART      `OC8051_SFR_SCON: 	dat0 <= #1 scon;      `OC8051_SFR_SBUF: 	dat0 <= #1 sbuf;      `OC8051_SFR_PCON: 	dat0 <= #1 pcon;`endif`ifdef OC8051_TC01      `OC8051_SFR_TH0: 		dat0 <= #1 th0;      `OC8051_SFR_TH1: 		dat0 <= #1 th1;      `OC8051_SFR_TL0: 		dat0 <= #1 tl0;      `OC8051_SFR_TL1: 		dat0 <= #1 tl1;      `OC8051_SFR_TMOD: 	dat0 <= #1 tmod;`endif      `OC8051_SFR_IP: 		dat0 <= #1 ip;      `OC8051_SFR_IE: 		dat0 <= #1 ie;      `OC8051_SFR_TCON: 	dat0 <= #1 tcon;`ifdef OC8051_TC2      `OC8051_SFR_RCAP2H: 	dat0 <= #1 rcap2h;      `OC8051_SFR_RCAP2L: 	dat0 <= #1 rcap2l;      `OC8051_SFR_TH2:    	dat0 <= #1 th2;      `OC8051_SFR_TL2:    	dat0 <= #1 tl2;      `OC8051_SFR_T2CON:  	dat0 <= #1 t2con;`endif//      default: 			dat0 <= #1 8'h00;    endcase    wait_data <= #1 1'b0;  endend////set output in case of address (bit)always @(posedge clk or posedge rst)begin  if (rst)    bit_out <= #1 1'h0;  else if (          ((adr1[7:3]==adr0[7:3]) & (~&adr1[2:0]) &  we & !wr_bit_r) |          ((wr_sfr==`OC8051_WRS_ACC1) & (adr0[7:3]==`OC8051_SFR_B_ACC)) 	//write to acc	  )    bit_out <= #1 dat1[adr0[2:0]];  else if ((adr1==adr0) & we & wr_bit_r)    bit_out <= #1 bit_in;  else    case (adr0[7:3]) /* synopsys full_case parallel_case */      `OC8051_SFR_B_ACC:   bit_out <= #1 acc[adr0[2:0]];      `OC8051_SFR_B_PSW:   bit_out <= #1 psw[adr0[2:0]];`ifdef OC8051_PORTS  `ifdef OC8051_PORT0      `OC8051_SFR_B_P0:    bit_out <= #1 p0_data[adr0[2:0]];  `endif  `ifdef OC8051_PORT1      `OC8051_SFR_B_P1:    bit_out <= #1 p1_data[adr0[2:0]];  `endif  `ifdef OC8051_PORT2      `OC8051_SFR_B_P2:    bit_out <= #1 p2_data[adr0[2:0]];  `endif  `ifdef OC8051_PORT3      `OC8051_SFR_B_P3:    bit_out <= #1 p3_data[adr0[2:0]];  `endif`endif      `OC8051_SFR_B_B:     bit_out <= #1 b_reg[adr0[2:0]];      `OC8051_SFR_B_IP:    bit_out <= #1 ip[adr0[2:0]];      `OC8051_SFR_B_IE:    bit_out <= #1 ie[adr0[2:0]];      `OC8051_SFR_B_TCON:  bit_out <= #1 tcon[adr0[2:0]];`ifdef OC8051_UART      `OC8051_SFR_B_SCON:  bit_out <= #1 scon[adr0[2:0]];`endif`ifdef OC8051_TC2      `OC8051_SFR_B_T2CON: bit_out <= #1 t2con[adr0[2:0]];`endif//      default:             bit_out <= #1 1'b0;    endcaseendalways @(posedge clk or posedge rst)begin  if (rst) begin    prescaler <= #1 4'h0;    pres_ow <= #1 1'b0;  end else if (prescaler==4'b1011) begin    prescaler <= #1 4'h0;    pres_ow <= #1 1'b1;  end else begin    prescaler <= #1 prescaler + 4'h1;    pres_ow <= #1 1'b0;  endendendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -