verilog HDL 串口接受程序

module myuart(
input Gclk, //system clock
input rst_n, //glabol reset signal
input rx, //serical data in
output reg tx, //serical data out
output reg DataReady, //a complete byte has been received
output reg[7:0] DataReceived, //Bytes received
output reg gnd=1‘b0
);

/* general sample clock*/
reg[7:0] count;
reg clk16x; //sample clock
[email protected](posedge Gclk or posedge rst_n)
if(rst_n)
begin
count<=8‘d0;
clk16x<=1‘b0;
end
else if(count>=8‘d125)
begin
count<=8‘d0;
clk16x <= ~clk16x;
end
else count<=count+1‘b1;

/*how to find the negedge*/
reg trigger_r0;
wire neg_tri;
[email protected](posedge clk16x or posedge rst_n)
begin
if(rst_n) trigger_r0<=1‘b0;
else trigger_r0<=rx;
end
assign neg_tri = trigger_r0 & ~rx;

/* counter control*/
reg cnt_en;
[email protected](posedge Gclk or posedge rst_n)
begin
if(rst_n) cnt_en<=1‘b0;
else if(neg_tri==1‘b1) cnt_en<=1‘b1;
else if(cnt==8‘d152) cnt_en<=1‘b0;
end

/* counter module*/
reg[8:0] cnt;
[email protected](posedge clk16x or posedge rst_n)
begin
if(rst_n) cnt<=8‘d0;
else if(cnt_en) cnt<=cnt+1‘b1;
else cnt<=8‘d0;
end
/* receive module*/
reg StopBit_r;
[email protected](posedge clk16x or posedge rst_n)
begin
if(rst_n)
begin
DataReceived<=8‘b0;
tx <= 1‘b1;
end
else if(cnt_en)
case(cnt)
9‘d24: DataReceived[0] <= rx;
9‘d40: DataReceived[1] <= rx;
9‘d56: DataReceived[2] <= rx;
9‘d72: DataReceived[3] <= rx;
9‘d88: DataReceived[4] <= rx;
9‘d104: DataReceived[5] <= rx;
9‘d120: DataReceived[6] <= rx;
9‘d136: DataReceived[7] <= rx;

endcase
end

[email protected](posedge Gclk or posedge rst_n)
begin
if(rst_n) DataReady<=1‘b1;
else if(cnt>=8‘d152) DataReady<=1‘b0;
else DataReady<=1‘b1;
end
endmodule

时间: 2024-10-25 14:46:40

verilog HDL 串口接受程序的相关文章

Verilog HDL的程序结构及其描述

这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog  HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog HDL的程序结构 首先我们不开始讲Verilog HDL的语法,我们从Verilog HDL的程序结构出发.相信大家都看过芯片吧,它有个名字,有个外壳,外壳向外伸出有引脚(BGA封装的那种请不要乱搅和...),然后芯片它可以实现一定的功能. Ok,知道这些之后,我们就来看看Verilog HDL的描

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

自己动手写处理器之第二阶段(2)——Verilog HDL简介

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第六篇,我尽量每周四篇 2.3 Verilog HDL简介 本书实现的OpenMIPS处理器是使用Verilog HDL编写的,所以本章接下来的几节将介绍Verilog HDL的一些基本知识,包括语法.结构等.因为本书并不是一本讲授Verilog HDL的专门书籍,所以此处介绍的内容并不是Verilog HDL的全部,只是一些基础知识,以及在OpenMIPS处理器实现过程中会使用到的知识.读者如果对Verilog HDL有进一步了解

3_8译码器Verilog HDL语言的简单实现

最近在学Verilog HDL语言,觉得learn in doing是比较好的学习方式,所以我们来直接分析分析代码好了. 先来一波代码: 1 module q_decode_38(data_in,data_out); 2 3 input[2:0] data_in; //端口声明 4 output[7:0] data_out; 5 reg[7:0] data_out; 6 7 always@(data_in) 8 begin 9 case(data_in) 10 3'd0:data_out = 8

基于Verilog HDL整数乘法器设计与仿真验证

基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为0表示为正数),取值范围为-127~127. 负数的表示方法为正值的求反又加1.例如: 8’b0000_0100; //表示值:4,正值求反为:8’b1111_1011:再加1表示为:8’b1111_1100,这样便得到了-4的表示方法为:8’b1111_1100. 同理,负值变成正值的方法为:负值

转:Qt编写串口通信程序全程图文讲解

转载:http://blog.csdn.net/yafeilinux/article/details/4717706  作者:yafeilinux (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourceforge.net/projects/qextser

&lt;转&gt;Verilog HDL宏定义define

宏定义 `define 用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: `define 标识符(宏名) 字符串(宏内容) 如:`define signal string 它的作用是指定用标识符signal来代替string这个字符串,在编译预处理时,把程序中在该命令以后所有的signal都替换成string.这种方法使用户能以一个简单的名字代替一个长的字符串,也可以用一个有含义的名字来代替没有含义的数字和符号,因此把这个标识符(名字)称为“宏名”,在编译预处理时将宏名替换成字符串

自己动手写处理器之第二阶段(3)——Verilog HDL行为语句

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第七篇,我尽量每周四篇 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包括有过程语句,过程语句有两种:initial.always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的,initial过程语句是不可综合的.       1.always过程语句 always过程语句的格式如图2-10所示.

MiS603开发板 2.1 Verilog HDL 代码规范

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.1 Verilog HDL 代码规范 规范的代码风格,可以让程序更容易阅读和维护. u 文档管理 合理的文档管理也是程序代码规范的重