亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arm10.v

?? arm10_verilog.rar是基于arm10的verilog代碼
?? V
?? 第 1 頁 / 共 5 頁
字號:
				end			    end			end		    end		end	    end	endtask	//Software Interrupts (SWI)	task swi;		     begin		//Store next Instruction (PC = PC+4)		inst_result[0] = r15;		result_dest[0] = 5'h18;		result_valid[0] = 1'b1;		//Store the CPSR in SPSR_svc		psr_result[0] = CPSR;		psr_dest[0] = 3'h2;		psr_valid[0] = 1'b1;		//Set SVC Mode and disable IRQ		psr_result[1] = {PSR0[31:8],1'b1,PSR0[6],6'b010011};		psr_dest[1] = 3'h0;		psr_valid[1] = 1'b1;		//Set the PC to the SWI Vector		next_pc = 32'h00000008;		//Don't increment PC on next 		pc_touched = 1'b1;	    end	endtask	//Branch Instructions	task br;		    reg [31:0] twosC;		//2's Comp of Offset, if (-)	    reg [31:0] offset;		//holds the shifted, s-ext offset	    begin		offset = {{6{ir[23]}},ir[23:0],2'b00};				//Store PC if Link bit set		//Actually storing PC + 4		if (ir[24] == 1'b1)		  begin		    inst_result[0] = r15+4;		    result_dest[0] = map(4'hE);		    result_valid[0] = 1'b1;		  end		//Calculate offset (if negative) and 		//update the PC		if (offset[31] == 1'b1) begin		    twosC = ~(offset) + 1;		    next_pc = r15 - twosC + 8;		    pc_touched = 1'b1;		end		else begin		    next_pc = r15 + offset + 8;		    pc_touched = 1'b1;		end	    end	endtask			//Store Half-Word Instructions	task strh;			    reg [31:0] data;		//data to store	    reg [31:0] addr;		//address to store	    reg [31:0] base;		//address in base register	    reg [31:0] reg_offset;	//offset in register	    reg [31:0] temp;		//necessary for writing only					//a half word.  	    begin		data = reg_decode(map(Rd));		base = reg_decode(map(Rn));		reg_offset = reg_decode(map(Rm));		//Calculate the Destination Address		//Register Offset		if (ir[22] == 1'b0) begin		    if (ir[23] == 1'b1) 		//add offset			addr = base + reg_offset;		    else				//sub offset			addr = base - reg_offset;		end		//Immediate Offset		else begin		    if (ir[23] == 1'b1)			//add offset			addr = base + 				{{24{1'b0}},ir[11:8],ir[3:0]};		    else				//sub offset			addr = base -                                {{24{1'b0}},ir[11:8],ir[3:0]};		end			//perform the store		if (ir[24] == 1'b1)			//pre-index		begin		    addr_bus = addr;		    data_bus = {2{data[15:0]}};		end		else 					//post-index		begin		    addr_bus = base;		    data_bus = {2{data[15:0]}};		end					//Perform Write-back, if necessary		if ((ir[24] == 1'b0)||(ir[21] == 1'b1))		  begin		    inst_result[0] = addr;		    result_dest[0] = map(Rn);		    result_valid[0] = 1'b1;		  end		/*Simulate a Smart Memory System		  Problem with my memory is that its word-addressable		  This causes problems when trying to write only a 		  half-word, or byte.  To write a half word, I have 		  to read the memory location, overwrite the specified		  half-word, and then write the data.*/			temp = mem[addr_bus[31:2]];		case ({BIGEND,addr_bus[1]})			2'b00,2'b11:		//word boundary			    temp = {temp[31:16],data_bus[15:0]};			2'b01,2'b10:		//half-word boundary			    temp = {data_bus[31:16],temp[15:0]};		endcase		data_bus = temp;		$save_store();		    		mem[addr_bus[31:2]] = temp;	    end	endtask	//Store Single Data Instruction	task strw;		    reg [32:0] shifted_offset;	//holds shifted offset            reg [31:0] data;            //data to store            reg [31:0] addr;            //address to store	    reg [31:0] base;		//base address	    reg [31:0] reg_offset;	//offset value            reg [31:0] temp;		//necessary for byte-addressing            begin                data = reg_decode(map(Rd));        		//Read data8		base = reg_decode(map(Rn));		reg_offset = reg_decode(map(Rm));		//Read Offset		shifted_offset = shift(reg_offset);		//Shift Offset                //Calculate the Destination Address                //Shifted Register Offset                if (ir[25] == 1'b1) begin                    if (ir[23] == 1'b1)                 //add offset                        addr = base + shifted_offset[31:0];                       else                                //sub offset                        addr = base - shifted_offset[31:0];                end                //Immediate Offset                else begin                    if (ir[23] == 1'b1)                 //add offset                        addr = base + {{20{1'b0}},ir[11:0]};                            else                                //sub offset                          addr = base - {{20{1'b0}},ir[11:0]};                end                               //perform the store		case ({ir[24],ir[22]})		    //Post Indexing, Store Word		    2'b00: begin 			addr_bus = base;			data_bus = data;		    end		    //Post Indexing, Store Byte		    2'b01: begin			addr_bus = base;			data_bus = {4{data[7:0]}};		    end		    //Pre Indexing, Store Word		    2'b10: begin			addr_bus = addr;			data_bus = data;		    end		    //Pre Indexing, Store Byte		    2'b11: begin			addr_bus = addr;			data_bus = {4{data[7:0]}};		    end		endcase			                //Perform Write-back, if necessary                if ((ir[24] == 1'b0)||(ir[21] == 1'b1))		  begin		    inst_result[0] = addr;		    result_dest[0] = map(Rn);		    result_valid[0] = 1'b1;		  end		/*Simulate the Memory System		  I defined the memory system to be word 		  addressable, so to write a byte, first		  the data must be read from memory.  The		  correct byte must be overwritten, then		  the data written back.*/		temp = mem[addr_bus[31:2]];		if (ir[22] == 1'b0)	//store word		    temp = data_bus;		else begin		//store byte		    case ({BIGEND,addr_bus[1:0]})			3'b000,3'b111:				temp = {temp[31:8],data_bus[7:0]};			3'b001,3'b110:				temp = {temp[31:16],data_bus[15:8],temp[7:0]};			3'b010,3'b101:				temp = {temp[31:24],data_bus[23:16],temp[15:0]};			3'b011,3'b100:				temp = {data_bus[31:24],temp[23:0]};		    endcase		end			data_bus = temp;		$save_store();	    			    		mem[addr_bus[31:2]] = temp;            end        endtask	//Store Multiple Data Words	task stm;			    reg [31:0] low_addr;		//lowest address	    reg [31:0] high_addr;		//higest address	    reg [31:0] addr;			//store to address	    reg [3:0]  reg_index;		//Register index	    reg        pre_inc_addr;		//Pre-Increment	    integer inc_dec;			//holds +/- 4	    integer int_Rn;			//Integer equiv. of Rn	    integer i;					    integer j; 	begin	    low_addr = reg_decode(map(Rn));		//set Base Pointer	    high_addr = low_addr;		//initialize High Address	    reg_index = 4'h0;			//reset index	    int_Rn = Rn;			//set int_Rn to Rn	    //Increment or decrement	    if (ir[23] == 1'b1)			//Up?		inc_dec = 4;	    else				//Down?		inc_dec = -4;	    //Calculate High and Low Addresses                       for (i = 0; i <= 15; i = i+1) begin                if ((ir[i] == 1'b1) && (ir[23] == 1'b0))                    low_addr = low_addr + inc_dec;                if ((ir[i] == 1) && (ir[23] == 1'b1))                    high_addr = high_addr + inc_dec;            end		    //Initialize Store Address, Always store	    //From lowest address to Highest Address	    addr = low_addr;	    //If Pre-Inc or Post-Dec - Need to 	    //Increment Low Address before the store            if (((ir[24] == 1'b1) && (ir[23] == 1'b1))               ||((ir[24] == 1'b0) && (ir[23] == 1'b0)))	        addr = addr + 4;	    // Perform the store	    for (j = 0; j <= 15; j = j+1) begin                //Write-Back performed after First Store                //If Incrementing -> high_addr, else -> low_addr                if ((j == 1) && (ir[21] == 1))		  begin		    //leaving this write, because it is necessary to		    //write the base back.  Putting in the delay, so that		    //it will not screw up the checker.  Checker should 		    //not see this reg change until the next instruction.		    //Therefore, if the clock cycle changes length, 		    //the delay must be changed suitably.		    #75;		    write_reg(map(Rn),(ir[23] ? high_addr : low_addr));		   end		if (ir[j] == 1'b1) begin		    if (ir[22] == 1'b1)		      //only transfer USR bank registers		      begin			mem[addr[31:2]] = reg_decode({1'b0, reg_index});			addr_bus = addr;			data_bus = reg_decode({1'b0, reg_index});			$save_store();		      end	            else			//transfer <mode> registers		      begin			mem[addr[31:2]] = reg_decode(map(reg_index));			addr_bus = addr;			data_bus = reg_decode(map(reg_index));			$save_store();		      end                    //Increment address unless not supposed to                    if ((j != 15)||(ir[24] != 1'b1))                        addr = addr + 4;  		end		reg_index = reg_index + 1;	    end	end    endtask	//Load Multiple Data Words	task ldm;	    reg [31:0] low_addr;		//lowest load address	    reg [31:0] high_addr;		//highest address	    reg [31:0] addr;			//store address            reg [3:0]  reg_index;               //Register index	    reg        r15_set;			//R15 in list?            integer inc_dec;                    //holds +/- 4	    integer int_Rn;			//integer equiv. of Rn            integer i;            integer j;        begin            low_addr = reg_decode(map(Rn));		//set Base Pointer	    high_addr = low_addr;		//initialize high address	    addr = low_addr;			//initialize             reg_index = 4'h0;                   //reset index	    r15_set = ir[15];			      	    int_Rn = Rn;                   //Increment or decrement            if (ir[23] == 1'b1)                 //Up?                  inc_dec = 4;            else                                //Down?                inc_dec = -4;		    //Calculate the Highest & Lowest Addresses	    high_addr = low_addr;            for (i = 0; i <= 15; i = i+1) begin                if ((ir[i] == 1'b1) && (ir[23] == 1'b0))                    low_addr = low_addr + inc_dec;		if ((ir[i] == 1) && (ir[23] == 1'b1))		    high_addr = high_addr + inc_dec;            end                     //Initialize Store Address, Always store            //From lowest address to Highest Address            addr = low_addr;            //If Pre-Inc or Post-Dec - Need to            //Increment Low Address before the store            if (((ir[24] == 1'b1) && (ir[23] == 1'b1))               ||((ir[24] == 1'b0) && (ir[23] == 1'b0)))                addr = addr + 4;	    //Perform the Load Operation            for (j = 0; j <= 15; j = j+1) begin		//Write-Back performed after First Load		//If Incrementing -> high_addr, else -> low_addr 		if ((j == 1) && (ir[21] == 1))		  begin		    //leaving this write, because it is necessary to		    //write the base back.  Putting in the delay, so that		    //it will not screw up the checker.  Checker should 		    //not see this reg change until the next instruction.		    //Therefore, if the clock cycle changes length, 		    //the delay must be changed suitably.		    #75;		    write_reg(map(Rn),(ir[23] ? high_addr : low_addr));		  end                if (ir[j] == 1'b1) begin		    //IF S & R15, SPSR->CPSR		    if ((j == 15) && (ir[22] == 1))		      begin			psr_result[0] = psr_decode(mappsr(1'b1));			psr_dest[0] = 3'h0;			psr_valid[0] = 1'b1;		      end		    //IF S & !R15, Load to User Bank Registers	            if ((ir[22] == 1'b1)&&(r15_set == 1'b0))                        //only transfer USR bank registers		      begin			inst_result[j] = mem[addr[31:2]];			result_dest[j] = {1'b0, reg_index};			result_valid[j] = 1'b1;			data_bus = mem[addr[31:2]];			addr_bus = addr;		      end                    else                        //transfer <mode> registers		      begin			inst_result[j] = mem[addr[31:2]];			result_dest[j] = map(reg_index);			result_valid[j] = 1'b1;			data_bus = mem[addr[31:2]];			addr_bus = addr;		      end		    /

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费成人在线观看视频| eeuss鲁片一区二区三区| 99re亚洲国产精品| 亚洲精品一区二区三区在线观看| 国产精品动漫网站| 精品国产乱码久久久久久图片| 久久网站最新地址| 另类调教123区| 欧美精品亚洲一区二区在线播放| **性色生活片久久毛片| 国产大陆亚洲精品国产| 久久―日本道色综合久久| 精品综合免费视频观看| 日韩一区二区三区高清免费看看 | 欧美色男人天堂| 亚洲高清视频在线| 欧美丰满美乳xxx高潮www| 亚洲h精品动漫在线观看| 精品视频一区二区不卡| 亚洲va欧美va人人爽| 91精品国产日韩91久久久久久| 日韩国产高清影视| 久久天天做天天爱综合色| 高清国产一区二区| 一区二区三区四区不卡在线| 欧美剧情电影在线观看完整版免费励志电影 | 欧美国产日韩亚洲一区| 91天堂素人约啪| 视频一区二区三区在线| 久久久国际精品| 3751色影院一区二区三区| 国产一区二区三区四区在线观看 | 日韩欧美一级二级三级久久久| 国产伦精品一区二区三区视频青涩 | 欧美日韩在线电影| 国产精品一卡二| 午夜成人在线视频| 亚洲国产精品成人综合| 91精品国产福利| 色呦呦日韩精品| 成人精品小蝌蚪| 久久精品国产网站| 日韩av在线发布| 亚洲精品视频在线观看网站| 久久蜜桃av一区精品变态类天堂 | 欧美性大战久久| 九九精品一区二区| 奇米888四色在线精品| 一区二区三区资源| 亚洲欧美综合网| 中文字幕在线不卡| 国产欧美1区2区3区| 欧美草草影院在线视频| 欧美体内she精高潮| 在线免费观看一区| 成人国产免费视频| 亚洲自拍偷拍av| 99视频在线观看一区三区| 国产精品456露脸| 国产剧情av麻豆香蕉精品| 国产精品一区二区在线看| 久久不见久久见免费视频7| 蜜桃av一区二区三区| 免费成人深夜小野草| 久99久精品视频免费观看| 男女男精品网站| 国产一区二区三区日韩| 国产成人av资源| 91官网在线免费观看| 欧美丰满少妇xxxxx高潮对白| 欧美精品三级日韩久久| 精品国产免费人成在线观看| 国产午夜三级一区二区三| 最新国产成人在线观看| 亚洲精品水蜜桃| 黄色成人免费在线| 9久草视频在线视频精品| 欧美一级日韩免费不卡| 久久奇米777| 亚洲国产精品麻豆| 国产一区二区中文字幕| 在线免费观看日本一区| 久久网这里都是精品| 五月激情综合色| 色哟哟一区二区三区| 欧美精品一区二区三区蜜桃| 一区二区在线观看视频| 国产一区二区精品久久99| 欧美日韩精品系列| 国产精品家庭影院| 久久狠狠亚洲综合| 欧美日韩国产精品成人| 国产精品三级av| 国产精品中文字幕一区二区三区| 欧洲精品一区二区| 日韩精品欧美精品| 日本欧美在线观看| 成人国产视频在线观看| 国产美女一区二区三区| 久久电影网站中文字幕| 精品亚洲成a人| 久久国产精品第一页| 男女性色大片免费观看一区二区 | 一区二区三区欧美久久| 国产99久久久国产精品潘金网站| 欧美日韩一区二区三区免费看| 亚洲欧美视频一区| 色综合天天综合狠狠| 亚洲色图在线播放| 欧美视频在线观看一区二区| 一区二区三区精品在线观看| 欧美调教femdomvk| 日本伊人色综合网| 久久综合狠狠综合久久综合88 | 日韩1区2区日韩1区2区| 欧美一区二区三区在线视频| 久久se这里有精品| 中文字幕精品—区二区四季| 日韩精品一区第一页| 精品久久久久久亚洲综合网 | 欧美疯狂性受xxxxx喷水图片| 91精品视频网| 91国模大尺度私拍在线视频| 丝袜美腿一区二区三区| 久久综合一区二区| 在线观看国产一区二区| 日韩精品国产欧美| 1024国产精品| 日韩欧美美女一区二区三区| 91在线免费视频观看| 免费观看久久久4p| 亚洲精品免费电影| 久久久久97国产精华液好用吗| 一本大道久久a久久综合| 日本成人超碰在线观看| 日本欧美一区二区三区| 99久久99久久久精品齐齐| 日韩精品专区在线影院重磅| 成人欧美一区二区三区小说| 久久影音资源网| 日韩欧美国产综合一区 | 国内精品伊人久久久久av影院| 又紧又大又爽精品一区二区| 久久精品一区四区| 久久亚洲捆绑美女| 日韩区在线观看| 欧美一区二区久久久| 在线播放亚洲一区| 欧美高清视频www夜色资源网| 日本黄色一区二区| 色综合色综合色综合色综合色综合 | 亚洲主播在线观看| 91免费精品国自产拍在线不卡| 国产女同互慰高潮91漫画| 午夜精品福利一区二区三区av| 亚洲黄色性网站| 亚洲成av人片在线观看无码| 天天色综合天天| 亚洲成人一区在线| 日韩高清一区在线| 精品制服美女久久| 懂色一区二区三区免费观看| www.在线欧美| 欧美主播一区二区三区| 7878成人国产在线观看| 欧美一区二区三区在线观看视频| 在线综合亚洲欧美在线视频| 国产在线播精品第三| 日欧美一区二区| 日本不卡视频一二三区| 678五月天丁香亚洲综合网| 亚洲精品成人精品456| 欧美影院一区二区三区| 国产欧美日韩另类视频免费观看| 欧美日韩情趣电影| 日韩你懂的在线观看| 欧美另类变人与禽xxxxx| 欧美日韩中文字幕一区| 这里只有精品视频在线观看| 精品国产三级电影在线观看| 欧美激情一区二区三区在线| 国产日韩欧美在线一区| 国产精品视频一区二区三区不卡| 日韩毛片一二三区| 亚洲乱码精品一二三四区日韩在线| 日韩一区在线免费观看| |精品福利一区二区三区| 亚洲伦在线观看| 麻豆专区一区二区三区四区五区| 中文字幕精品一区二区精品绿巨人 | 91精品国产综合久久精品图片| 欧美理论在线播放| 国产欧美日韩在线观看| 日韩精品一级中文字幕精品视频免费观看| 伦理电影国产精品| 99热在这里有精品免费| 精品久久久影院| 日韩高清不卡一区二区三区| 91亚洲精华国产精华精华液| 精品少妇一区二区三区在线视频|