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

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

?? serial.v

?? 串口通訊 verilog CPLD EPM1270 源代碼
?? V
字號:
/*
本模塊的功能是驗證實現和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=8'b11111110;//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'h30:
			seg_data=8'b0000_0011;
		8'h31:
			seg_data=8'b1001_1111;
		8'h32:
			seg_data=8'b0010_0101;
		8'h33:
			seg_data=8'b0000_1101;
		8'h34:
			seg_data=8'b1001_1001;
		8'h35:
			seg_data=8'b0100_1001;
		8'h36:
			seg_data=8'b0100_0001;
		8'h37:
			seg_data=8'b0001_1111;
		8'h38:
			seg_data=8'b0000_0001;
		8'h39:
			seg_data=8'b0001_1001;
		8'h41:
			seg_data=8'b0001_0001;
		8'h42:
			seg_data=8'b1100_0001;
		8'h43:
			seg_data=8'b0110_0011;
		8'h44:
			seg_data=8'b1000_0101;
		8'h45:
			seg_data=8'b0110_0001;
		8'h46:
			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一区二区三区免费野_久草精品视频
欧美日韩中字一区| 一区二区视频在线看| 欧美韩国日本不卡| 午夜欧美在线一二页| 国产福利视频一区二区三区| 欧美性生交片4| 国产精品系列在线| 九九九久久久精品| 欧美日韩高清一区二区不卡| 国产精品二区一区二区aⅴ污介绍| 亚洲福中文字幕伊人影院| 不卡电影免费在线播放一区| 精品国产sm最大网站| 亚洲国产欧美一区二区三区丁香婷| 成人激情文学综合网| 久久亚洲一区二区三区四区| 日本91福利区| 欧美日韩亚洲丝袜制服| 亚洲卡通动漫在线| 99精品热视频| 国产精品家庭影院| 国产福利一区二区三区视频在线 | 粉嫩13p一区二区三区| 欧美肥妇free| 亚洲成人自拍网| 欧美亚洲图片小说| 亚洲午夜羞羞片| 欧美在线观看视频一区二区 | 亚洲成精国产精品女| 99这里都是精品| 国产精品美女久久久久aⅴ| 国产福利91精品一区| 国产视频不卡一区| 成人综合婷婷国产精品久久免费| 久久只精品国产| 国产一区二区h| 欧美国产日韩精品免费观看| 国产.精品.日韩.另类.中文.在线.播放| 精品蜜桃在线看| 国产一区二区免费在线| 国产欧美一区二区精品秋霞影院| 国产激情一区二区三区四区| 国产精品人成在线观看免费| 97精品电影院| 亚洲一区二区五区| 欧美精品在线视频| 国内外成人在线视频| 久久美女艺术照精彩视频福利播放| 国产一区二区三区视频在线播放 | 7777精品伊人久久久大香线蕉的| 石原莉奈在线亚洲三区| 日韩欧美国产麻豆| 成人性色生活片| 夜夜嗨av一区二区三区网页| 欧美一区二区三区四区高清| 久久99精品国产91久久来源| 国产精品日韩成人| 精品视频在线看| 激情综合网av| 亚洲婷婷综合久久一本伊一区| 欧美日韩国产bt| 国产成人丝袜美腿| 亚洲一区二区三区激情| 日韩久久免费av| 北条麻妃一区二区三区| 五月婷婷激情综合| www精品美女久久久tv| 91蜜桃网址入口| 免费看黄色91| 亚洲少妇30p| 日韩欧美视频一区| 91丨九色丨尤物| 久久成人免费电影| 怡红院av一区二区三区| 精品国产三级电影在线观看| 色综合天天综合在线视频| 久久精品99国产精品日本| 亚洲视频香蕉人妖| 日韩一级片在线播放| 色哟哟国产精品免费观看| 韩国中文字幕2020精品| 亚洲丶国产丶欧美一区二区三区| 国产三级精品三级| 在线综合视频播放| 99精品偷自拍| 国产成人在线观看免费网站| 三级在线观看一区二区| 综合久久久久久| 久久色在线视频| 欧美一级一级性生活免费录像| 97精品国产97久久久久久久久久久久| 六月婷婷色综合| 香蕉久久夜色精品国产使用方法| 国产精品视频在线看| 精品国产一区二区亚洲人成毛片| 欧美视频中文字幕| 色哟哟一区二区| 97久久久精品综合88久久| 国产传媒久久文化传媒| 国产在线看一区| 日韩电影在线免费观看| 亚洲图片有声小说| 亚洲免费大片在线观看| 成人欧美一区二区三区视频网页| 久久人人超碰精品| 欧美变态tickling挠脚心| 91精品一区二区三区久久久久久| 91黄视频在线观看| 99久久精品国产观看| 波多野结衣精品在线| 成人一区在线看| 国产精品亚洲а∨天堂免在线| 久久99国产乱子伦精品免费| 老司机一区二区| 精品亚洲porn| 久久99国产乱子伦精品免费| 蜜芽一区二区三区| 久久精品国产成人一区二区三区| 麻豆国产精品视频| 精品在线一区二区三区| 国产精品自产自拍| 成人激情综合网站| 色婷婷av一区二区三区大白胸| 日本乱人伦一区| 欧美人与禽zozo性伦| 91精品国产一区二区三区| 欧美电影免费观看高清完整版在线 | 精品999在线播放| 亚洲精品在线免费播放| 久久久不卡网国产精品二区| 久久久久久久久久美女| 国产精品成人免费在线| 亚洲欧美电影一区二区| 亚洲国产精品尤物yw在线观看| 性久久久久久久| 国产一区二区免费视频| www.一区二区| 欧美人xxxx| 欧美精品一区二区三| 国产精品九色蝌蚪自拍| 亚洲午夜精品在线| 国产一区二区在线影院| voyeur盗摄精品| 欧美日韩一区成人| 国产亚洲精久久久久久| 亚洲欧美日本在线| 亚洲高清视频中文字幕| 国产在线日韩欧美| 91福利精品第一导航| 欧美变态口味重另类| 亚洲视频在线一区| 日韩黄色小视频| 成人国产精品免费观看| 欧美精选在线播放| 国产亚洲成av人在线观看导航| 亚洲美女区一区| 韩国理伦片一区二区三区在线播放| heyzo一本久久综合| 欧美一区二区三区性视频| 国产精品丝袜久久久久久app| 五月婷婷久久丁香| 菠萝蜜视频在线观看一区| 91精品视频网| 亚洲你懂的在线视频| 国内精品伊人久久久久av影院 | 另类成人小视频在线| 99r国产精品| 精品少妇一区二区三区在线播放 | 精品国产乱码久久久久久浪潮| 亚洲国产激情av| 日本大胆欧美人术艺术动态| 99久久精品一区二区| 精品国产污污免费网站入口| 亚洲国产精品久久久久婷婷884| 国产精品一区不卡| 日韩视频免费观看高清完整版在线观看| 国产精品色眯眯| 韩国女主播一区| 日韩欧美在线不卡| 亚洲国产精品久久久久秋霞影院 | 成人欧美一区二区三区白人 | 成人免费视频一区| 日韩欧美精品三级| 亚洲mv在线观看| 在线看不卡av| 亚洲天堂免费在线观看视频| 国产精品一区二区久激情瑜伽 | 蜜臀精品一区二区三区在线观看| 日本丶国产丶欧美色综合| 中文字幕欧美三区| 国产精品一卡二卡在线观看| 日韩欧美亚洲国产另类| 日本欧美加勒比视频| 91精品国产综合久久久久久漫画 | 国产精品毛片无遮挡高清| 国产老妇另类xxxxx| 国产亚洲成av人在线观看导航| 久久99精品国产.久久久久| 日韩一卡二卡三卡四卡| 蜜臀91精品一区二区三区|