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

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

?? serial.v

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

程序的基本工作過程是,按動一個按鍵 控制器向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'h145;//分頻參數,其值由對應的波特率計算而得,按此參數分頻的時鐘頻率是波倍特率的8	
		  //倍,此處值對應9600的波特率,即分頻出的時鐘頻率是9600*8  (CLK  50M)

////////////////////////////////////////////////
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'h30:
			seg_data=8'b11000000;
		8'h31:
			seg_data=8'b11111001;
		8'h32:
			seg_data=8'b10100100;
		8'h33:
			seg_data=8'b10110000;
		8'h34:
			seg_data=8'b10011001;
		8'h35:
			seg_data=8'b10010011;
		8'h36:
			seg_data=8'b10000010;
		8'h37:
			seg_data=8'b11111000;
		8'h38:
			seg_data=8'b10000000;
		8'h39:
			seg_data=8'b10010000;
		8'h41:
			seg_data=8'b00010001;
		8'h42:
			seg_data=8'b11000001;
		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一区二区三区免费野_久草精品视频
精品国产一区二区亚洲人成毛片| 色悠悠亚洲一区二区| 国产精品入口麻豆九色| 日韩精彩视频在线观看| 欧美精品久久久久久久多人混战| 亚洲成人午夜电影| 99久久99久久综合| 亚洲色图欧洲色图婷婷| 91麻豆国产自产在线观看| 亚洲精品乱码久久久久久黑人 | 亚洲图片欧美一区| 777亚洲妇女| 久久99久久久欧美国产| 26uuu亚洲| 色综合天天综合网国产成人综合天| 日韩美女久久久| 日韩亚洲欧美成人一区| 国产福利一区二区| 亚洲五码中文字幕| 久久久久久久久久美女| 91看片淫黄大片一级在线观看| 亚洲激情自拍视频| 亚洲图片一区二区| 欧美男同性恋视频网站| 日本特黄久久久高潮| 欧美一区二区二区| 一区二区三区四区在线播放| 日本中文一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 国产亚洲精品超碰| 欧美三级乱人伦电影| 国产成人h网站| 日日噜噜夜夜狠狠视频欧美人| 欧美videossexotv100| 色av综合在线| 丁香亚洲综合激情啪啪综合| 偷拍与自拍一区| 国产精品久久久久永久免费观看 | 亚洲电影中文字幕在线观看| 国产色综合久久| 欧美精品一区二| 欧美一级理论片| 91精品国产91热久久久做人人 | 91精品国产高清一区二区三区蜜臀 | 亚洲五月六月丁香激情| 国产精品免费视频一区| 日本一区二区三区四区| 久久综合99re88久久爱| 日韩欧美国产午夜精品| 欧美丰满少妇xxxbbb| 在线播放日韩导航| 欧美精品第1页| 日韩三级在线观看| 精品久久久久久无| 国产日韩欧美精品综合| 国产欧美日韩综合| 中文字幕一区二| 亚洲综合自拍偷拍| 天堂成人免费av电影一区| 日韩和欧美一区二区三区| 喷白浆一区二区| 国内欧美视频一区二区| 国产成人日日夜夜| 91日韩在线专区| 欧美日韩国产综合久久| 精品福利av导航| 国产欧美精品一区二区色综合 | 亚洲国产一区二区三区| 香港成人在线视频| 国产精品自拍在线| 一本色道**综合亚洲精品蜜桃冫| 欧美二区三区的天堂| 久久久久99精品国产片| 亚洲天堂久久久久久久| 日本欧美一区二区| 91亚洲永久精品| 日韩一级大片在线观看| 亚洲欧美aⅴ...| 久久精品理论片| 欧美午夜精品久久久久久孕妇| 国产视频一区二区在线| 欧美高清dvd| 亚洲成人av一区| 亚洲成在人线在线播放| 欧美在线观看视频在线| 亚洲一区中文日韩| 91麻豆精品91久久久久同性| 天天操天天色综合| 亚洲精品在线三区| 成人免费va视频| 午夜影院在线观看欧美| 欧美色偷偷大香| 日本欧美久久久久免费播放网| 欧美日韩亚洲综合一区| 一区二区三区日韩在线观看| 成人激情文学综合网| 欧美激情一区二区三区全黄 | 成人性色生活片免费看爆迷你毛片| 欧美视频你懂的| 精品在线你懂的| 欧美精品一区二区蜜臀亚洲| 久久91精品久久久久久秒播| 日韩免费电影网站| 国产高清久久久| 亚洲h动漫在线| 一区二区三区四区在线免费观看 | 欧美日韩一区二区在线观看| 免费观看在线色综合| 精品久久国产老人久久综合| 狠狠网亚洲精品| 中文天堂在线一区| 精品视频一区二区三区免费| 玖玖九九国产精品| 中文字幕中文字幕一区| 欧美一区二区三区在线电影| 国产麻豆精品在线观看| 最近中文字幕一区二区三区| 91精品欧美福利在线观看 | 午夜精品久久久久久久蜜桃app| 欧美蜜桃一区二区三区| www.视频一区| 久久精品国产亚洲高清剧情介绍| 亚洲欧洲av色图| 久久久精品tv| 国产精品三级电影| 国产精品久久久久久久蜜臀| 亚洲欧美综合在线精品| 亚洲色图欧洲色图| 亚洲精品国产一区二区精华液 | 亚洲综合一区二区三区| 亚洲同性同志一二三专区| 国产欧美精品在线观看| 精品国产一区二区精华| 日韩欧美一卡二卡| 精品裸体舞一区二区三区| 欧美一级久久久久久久大片| 欧美一二三区在线| 欧美成人a视频| 欧美成人高清电影在线| 日韩视频国产视频| 中文一区一区三区高中清不卡| 午夜欧美电影在线观看| 国产精品久久国产精麻豆99网站| 亚洲人亚洲人成电影网站色| 91精品国产一区二区三区| 91免费国产视频网站| 91精品国产综合久久久久久久久久 | 精品一二三四区| gogo大胆日本视频一区| 91精品久久久久久蜜臀| 欧美国产日韩a欧美在线观看| 亚洲成人激情社区| 日韩1区2区日韩1区2区| 丝袜亚洲精品中文字幕一区| 国产色产综合色产在线视频| 99精品久久久久久| 国产精品自拍一区| 日日噜噜夜夜狠狠视频欧美人 | 丁香五精品蜜臀久久久久99网站| 美女视频黄 久久| 欧美日韩亚洲综合在线| 一区二区三区在线观看欧美| av日韩在线网站| 国产精品乱人伦一区二区| 在线视频一区二区三区| 日韩国产一区二| 国产精品少妇自拍| 欧美亚一区二区| 狠狠色综合日日| 一区二区高清视频在线观看| 欧美一级欧美一级在线播放| 成人美女视频在线观看| 午夜精品视频一区| 国产欧美精品在线观看| 欧美日韩免费高清一区色橹橹| 九九视频精品免费| 亚洲免费伊人电影| 精品国产sm最大网站| 色天使色偷偷av一区二区| 久久99精品久久久| 亚洲精品免费在线播放| 26uuu国产一区二区三区| 色婷婷av一区二区三区软件| 韩国女主播一区二区三区| 综合久久久久综合| 精品国产乱码久久久久久浪潮| 91老师国产黑色丝袜在线| 国内精品伊人久久久久av一坑| 一区二区三区蜜桃| 国产视频一区二区在线| 538在线一区二区精品国产| 成人激情动漫在线观看| 麻豆成人免费电影| 亚洲自拍偷拍网站| 国产精品久久久久久久久果冻传媒| 日韩一区二区精品| 欧美日韩精品二区第二页| av在线一区二区三区| 国产一区二区免费在线| 日韩精品每日更新|