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

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

?? serial.v.bak

?? 串口通訊 verilog CPLD EPM1270 源代碼
?? BAK
字號:
/*
本模塊的功能是驗證實現和PC機進行基本的串口通信的功能。需要在PC機上安裝一個串口調試工具來驗證程序的功能。
程序實現了一個收發一幀10個bit(即無奇偶校驗位)的串口控制器,10個bit是1位起始位,8個數據位,1個結束位。
串口的波特律由程序中定義的div_par參數決定,更改該參數可以實現相應的波特率。程序當前設定的div_par 的值
是0x104,對應的波特率是9600。用一個8倍波特率的時鐘將發送或接受每一位bit的周期時間劃分為8個時隙以使通
信同步.

程序的基本工作過程是,按動一個按鍵SW0,控制器向PC的串口發送“welcome",
PC機接收后顯示驗證數據是否正確(串口調試工具設成按ASCII碼接受方式).
PC可隨時向CPLD發送0-F的十六進制數據,CPLD接受后顯示在7段數碼管上
*/
module serial(clk,rst,rxd,txd,en,seg_data,key_input,lowbit);

input clk,rst;
input rxd;//串行數據接收端
input key_input;//按鍵輸入

output[7:0] en;
output[7:0] seg_data;
reg[7:0] seg_data;
output txd;//串行數據發送端
output lowbit;


////////////////////inner reg////////////////////
reg[15:0] div_reg;//分頻計數器,分頻值由波特率決定。分頻后得到頻率8倍波特率的時鐘
reg[2:0]  div8_tras_reg;//該寄存器的計數值對應發送時當前位于的時隙數
reg[2:0]  div8_rec_reg;//該寄存器的計數值對應接收時當前位于的時隙數
reg[3:0] state_tras;//發送狀態寄存器
reg[3:0] state_rec;//接受狀態寄存器
reg clkbaud_tras;//以波特率為頻率的發送使能信號
reg clkbaud_rec;//以波特率為頻率的接受使能信號
reg clkbaud8x;//以8倍波特率為頻率的時鐘,它的作用是將發送或接受一個bit的時鐘周期分為8個時隙

reg recstart;//開始發送標志
reg recstart_tmp;

reg trasstart;//開始接受標志

reg rxd_reg1;//接收寄存器1
reg rxd_reg2;//接收寄存器2,因為接收數據為異步信號,故用兩級緩存
reg txd_reg;//發送寄存器
reg[7:0] rxd_buf;//接受數據緩存
reg[7:0] txd_buf;//發送數據緩存

reg[2:0] send_state;//每次按鍵給PC發送"Welcome"字符串,這是發送狀態寄存器
reg[19:0] cnt_delay;//延時去抖計數器
reg start_delaycnt;//開始延時計數標志
reg key_entry1,key_entry2;//確定有鍵按下標志

////////////////////////////////////////////////
parameter div_par=16'h104;//分頻參數,其值由對應的波特率計算而得,按此參數分頻的時鐘頻率是波倍特率的8	
		  //倍,此處值對應9600的波特率,即分頻出的時鐘頻率是9600*8

////////////////////////////////////////////////
assign txd=txd_reg;
assign lowbit=0;

assign en=0;//7段數碼管使能信號賦值

always@(posedge clk )
begin
	if(!rst) begin 
		cnt_delay<=0;
		start_delaycnt<=0;
	 end
	else if(start_delaycnt) begin
		if(cnt_delay!=20'd800000) begin
			cnt_delay<=cnt_delay+1;
		 end
		else begin
			cnt_delay<=0;
			start_delaycnt<=0;
		 end
	 end
	else begin
		if(!key_input&&cnt_delay==0)
				start_delaycnt<=1;
	 end
end

always@(posedge clk)
begin
	if(!rst) 
		key_entry1<=0;
	else begin
		if(key_entry2)
			key_entry1<=0;
		else if(cnt_delay==20'd800000) begin
			if(!key_input)
				key_entry1<=1;
		 end
	 end
end

always@(posedge clk )
begin
	if(!rst)
		div_reg<=0;
	else begin
		if(div_reg==div_par-1)
			div_reg<=0;
		else
			div_reg<=div_reg+1;
	 end
end

always@(posedge clk)//分頻得到8倍波特率的時鐘
begin
	if(!rst)
		clkbaud8x<=0;
	else if(div_reg==div_par-1)
		clkbaud8x<=~clkbaud8x;
end


always@(posedge clkbaud8x or negedge rst)
begin
	if(!rst)
		div8_rec_reg<=0;
	else if(recstart)//接收開始標志
		div8_rec_reg<=div8_rec_reg+1;//接收開始后,時隙數在8倍波特率的時鐘下加1循環
end

always@(posedge clkbaud8x or negedge rst)
begin
	if(!rst)
		div8_tras_reg<=0;
	else if(trasstart)
		div8_tras_reg<=div8_tras_reg+1;//發送開始后,時隙數在8倍波特率的時鐘下加1循環
end

always@(div8_rec_reg)
begin
	if(div8_rec_reg==7)
		clkbaud_rec=1;//在第7個時隙,接收使能信號有效,將數據打入
	else
		clkbaud_rec=0;
end

always@(div8_tras_reg)
begin
	if(div8_tras_reg==7)
		clkbaud_tras=1;//在第7個時隙,發送使能信號有效,將數據發出
	else
		clkbaud_tras=0;
end

always@(posedge clkbaud8x or negedge rst)
begin
	if(!rst) begin
		txd_reg<=1;
		trasstart<=0;
		txd_buf<=0;
		state_tras<=0;
		send_state<=0;
		key_entry2<=0;
	 end
	else begin
		if(!key_entry2) begin
			if(key_entry1) begin
				key_entry2<=1;
				txd_buf<=8'd119; //"w"
			 end
		 end
		else  begin
			case(state_tras)
				4'b0000: begin  //發送起始位
					if(!trasstart&&send_state<7) 
						trasstart<=1;
					else if(send_state<7) begin
						if(clkbaud_tras) begin
							txd_reg<=0;
							state_tras<=state_tras+1;
						 end
					 end
					else begin
						key_entry2<=0;
						state_tras<=0;
					 end					
				end		
				4'b0001: begin //發送第1位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0010: begin //發送第2位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				 4'b0011: begin //發送第3位
				 	if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0100: begin //發送第4位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0101: begin //發送第5位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0110: begin //發送第6位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b0111: begin //發送第7位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b1000: begin //發送第8位
					if(clkbaud_tras) begin
						txd_reg<=txd_buf[0];
						txd_buf[6:0]<=txd_buf[7:1];
						state_tras<=state_tras+1;
					 end
				 end
				4'b1001: begin //發送停止位
					if(clkbaud_tras) begin
						txd_reg<=1;
						txd_buf<=8'h55;
						state_tras<=state_tras+1;
					 end
				 end
				4'b1111:begin 
					if(clkbaud_tras) begin
						state_tras<=state_tras+1;
						send_state<=send_state+1;
						trasstart<=0;
						case(send_state)
							3'b000:
								txd_buf<=8'd101;//"e"
							3'b001:
								txd_buf<=8'd108;//"l"
							3'b010:
								txd_buf<=8'd99;//"c"
							3'b011:
								txd_buf<=8'd111;//"o"
							3'b100:
								txd_buf<=8'd109;//"m"
							3'b101:
								txd_buf<=8'd101;//"e"
							default:
								txd_buf<=0;
						 endcase
					 end
				 end
				default: begin
					if(clkbaud_tras) begin
						state_tras<=state_tras+1;
						trasstart<=1;
					 end
				 end
			 endcase
		 end
	 end
end

always@(posedge clkbaud8x or negedge rst)//接受PC機的數據
begin
	if(!rst) begin
		rxd_reg1<=0;
		rxd_reg2<=0;
		rxd_buf<=0;
		state_rec<=0;
		recstart<=0;
		recstart_tmp<=0;
	 end
	else  begin
		 rxd_reg1<=rxd;
		 rxd_reg2<=rxd_reg1;
		 if(state_rec==0) begin
			 if(recstart_tmp==1) begin
		 		recstart<=1;
		 		recstart_tmp<=0;
				state_rec<=state_rec+1;
		  	  end
		 	 else if(!rxd_reg1&&rxd_reg2) //檢測到起始位的下降沿,進入接受狀態
				recstart_tmp<=1;
		   end
		 else if(state_rec>=1&&state_rec<=8) begin
		 	 if(clkbaud_rec) begin
			 	rxd_buf[7]<=rxd_reg2;
				rxd_buf[6:0]<=rxd_buf[7:1];
				state_rec<=state_rec+1;
			  end
		  end
		 else if(state_rec==9) begin
		 	if(clkbaud_rec) begin
		 		state_rec<=0;
				recstart<=0;
			 end
		  end
	  end
end

always@(rxd_buf) //將接受的數據用數碼管顯示出來
begin
      case (rxd_buf)
		8'b0000_0000:
			seg_data=8'b0000_0011;
		8'b0000_0001:
			seg_data=8'b1001_1111;
		8'b0000_0010:
			seg_data=8'b0010_0101;
		8'b0000_0011:
			seg_data=8'b0000_1101;
		8'b0000_0100:
			seg_data=8'b1001_1001;
		8'b0000_0101:
			seg_data=8'b0100_1001;
		8'b0000_0110:
			seg_data=8'b0100_0001;
		8'b0000_0111:
			seg_data=8'b0001_1111;
		8'b0000_1000:
			seg_data=8'b0000_0001;
		8'b0000_1001:
			seg_data=8'b0001_1001;
		8'b0000_1010:
			seg_data=8'b0001_0001;
		8'b0000_1011:
			seg_data=8'b1100_0001;
		8'b0000_1100:
			seg_data=8'b0110_0011;
		8'b0000_1101:
			seg_data=8'b1000_0101;
		8'b0000_1110:
			seg_data=8'b0110_0001;
		8'b0000_1111:
			seg_data=8'b0111_0001;
		default:
			seg_data=8'b1111_1111;
	 endcase
end	

endmodule
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美手机在线视频| 国产成人一区在线| 国产精品对白交换视频| 欧美刺激脚交jootjob| 欧美日韩在线播放| 欧美三级午夜理伦三级中视频| 成人黄色在线网站| 国产剧情一区二区| 成人综合日日夜夜| eeuss国产一区二区三区| 成人黄色国产精品网站大全在线免费观看| 激情文学综合丁香| 国产大片一区二区| 成人黄色软件下载| 色系网站成人免费| 欧美日韩在线不卡| 日韩一卡二卡三卡四卡| 久久亚洲一区二区三区四区| 2欧美一区二区三区在线观看视频| 欧美va在线播放| 久久综合九色综合97婷婷女人| 久久久三级国产网站| 国产精品久久久久一区二区三区| 亚洲欧美日韩精品久久久久| 亚洲一区免费视频| 日本成人在线电影网| 国产乱人伦精品一区二区在线观看 | 大尺度一区二区| 91亚洲精品乱码久久久久久蜜桃| 欧美在线免费观看亚洲| 日韩精品一区二区三区在线观看| 国产亚洲一区二区在线观看| 亚洲嫩草精品久久| 秋霞国产午夜精品免费视频| 国产成人av电影在线观看| 色爱区综合激月婷婷| 日韩一级黄色大片| 亚洲国产精品成人综合 | 欧美一区二区在线播放| 久久久噜噜噜久久中文字幕色伊伊| 国产精品天美传媒沈樵| 五月天欧美精品| 成人性生交大片免费看中文| 欧美久久久久中文字幕| 欧美国产欧美综合| 裸体歌舞表演一区二区| 在线观看日韩精品| 欧美国产精品中文字幕| 午夜精品一区二区三区三上悠亚| 国产精品一区二区91| 欧美日韩国产在线观看| 国产亚洲精久久久久久| 日韩黄色片在线观看| 91麻豆国产香蕉久久精品| 日韩欧美高清一区| 亚洲成人动漫在线免费观看| 不卡一区在线观看| 久久久久国产一区二区三区四区 | 欧美日韩精品高清| 国产精品电影一区二区三区| 极品少妇xxxx偷拍精品少妇| 欧美午夜在线观看| 亚洲人成亚洲人成在线观看图片| 国产伦精一区二区三区| 日韩欧美视频在线| 日产精品久久久久久久性色| 在线一区二区三区做爰视频网站| 中文字幕精品三区| 国产成a人无v码亚洲福利| 欧美成人一区二区三区| 日本不卡一区二区| 3751色影院一区二区三区| 亚洲精品国产一区二区精华液| 国产91对白在线观看九色| 精品999在线播放| 裸体健美xxxx欧美裸体表演| 欧美人体做爰大胆视频| 午夜精品久久久久久久久久久| 色婷婷综合五月| 怡红院av一区二区三区| 日本韩国一区二区三区视频| 亚洲男人的天堂网| 日本久久一区二区| 亚洲五月六月丁香激情| 欧美丝袜自拍制服另类| 日本中文一区二区三区| 欧美不卡一区二区三区| 国产在线视视频有精品| 日本一区二区成人在线| 成人v精品蜜桃久久一区| 1区2区3区欧美| 91蝌蚪porny| 香蕉乱码成人久久天堂爱免费| 欧美日韩国产高清一区二区三区| 石原莉奈在线亚洲二区| 日韩一区二区在线观看视频播放| 久久99精品国产| 国产欧美一二三区| 色综合久久中文综合久久牛| 亚洲一区二区在线观看视频| 9191精品国产综合久久久久久| 久久精品国产一区二区三区免费看| 久久综合九色综合欧美就去吻| 成人av影视在线观看| 亚洲综合图片区| 日韩一区二区免费视频| 成人午夜免费视频| 亚洲电影一级片| 2023国产精华国产精品| 91免费看`日韩一区二区| 日韩精彩视频在线观看| 国产亚洲成av人在线观看导航| 色94色欧美sute亚洲线路二| 免费xxxx性欧美18vr| 国产精品久久福利| 欧美一区二区大片| 国产成人综合在线观看| 中文字幕欧美一| 91精品国模一区二区三区| 久久99蜜桃精品| 亚洲欧洲综合另类在线| 91精品国产高清一区二区三区蜜臀| 国产成人av一区二区三区在线| 亚洲国产成人高清精品| 国产精品久久久久久久久免费桃花| 欧美日韩综合不卡| 99久久精品国产精品久久| 免费一区二区视频| 一区二区三区毛片| 欧美高清在线一区二区| 欧美一区2区视频在线观看| 91美女在线观看| 成人美女在线视频| 国产剧情在线观看一区二区| 午夜影院久久久| 日韩一区在线看| 国产欧美日韩在线| 26uuu国产电影一区二区| 欧美老人xxxx18| 在线观看视频91| 91免费版pro下载短视频| 免费高清在线视频一区·| 亚洲v日本v欧美v久久精品| 亚洲色图欧洲色图婷婷| 中文字幕在线观看一区二区| 久久免费精品国产久精品久久久久| 欧美电影在哪看比较好| 精品视频一区二区三区免费| 91香蕉视频黄| 91在线看国产| 色综合久久久久综合| a美女胸又www黄视频久久| 丁香天五香天堂综合| 国产乱码字幕精品高清av | 最好看的中文字幕久久| 国产日产欧产精品推荐色| 精品国产伦一区二区三区观看方式| 色婷婷综合激情| 99精品国产一区二区三区不卡| 波多野结衣视频一区| 91在线观看美女| 色综合中文字幕国产 | 色综合色狠狠综合色| 91天堂素人约啪| 色屁屁一区二区| 欧美在线视频你懂得| 欧美精品18+| 欧美三级日韩三级| 欧美日韩国产三级| 4438成人网| 国产区在线观看成人精品| 中文字幕五月欧美| 亚洲综合色在线| 乱一区二区av| 成人毛片视频在线观看| 色嗨嗨av一区二区三区| 欧美一区二区三区在线看| 欧美精品一区二区三| 国产欧美一区二区三区网站| 亚洲日本丝袜连裤袜办公室| 午夜久久久影院| 韩国女主播一区| 91黄色免费看| 日韩精品专区在线影院重磅| 国产偷国产偷亚洲高清人白洁| 综合久久综合久久| 亚洲专区一二三| 久久国产精品99久久人人澡| 国产99久久久久久免费看农村| 在线观看日韩国产| 久久久蜜臀国产一区二区| 国产欧美日韩综合精品一区二区| 亚洲男同性恋视频| 国产真实乱子伦精品视频| 欧美优质美女网站| 精品国产污网站| 亚洲一区视频在线| 国产成人av一区| 5858s免费视频成人| 国产精品国产三级国产|