读书笔记(Verilog HDL那些事儿_建模篇0)
来源:互联网 发布:python标准输入输出 编辑:程序博客网 时间:2024/05/16 06:54
说明:写代码总感觉不是很好,向前辈学习,提升自己。
感悟:文章作者可以将一个大工程划分为多个子模块,主要分功能模块和控制模块,一个功能一个模块的思路刚开始觉得很繁琐,但是到后来却发 现他利于移植,更重要的是将功能划分开,方便阅读和维护。
进度:第三章(159页)
整理来自:时间的诗
1、模块:功能模块、控制模块、组合模块
2、准则:一个模块一个功能
3、信号:
组合模块:clk, rst_n, RX_Pin_In, TX_Pin_Out // 端口信号
控制模块:clk, rst_n, Start_Sig, Done_Sig, TX_En_Sig, TX_Done_Sig,
功能模块:clk, rst_n, Start_Sig, Done_Sig
模块内部:
TX_Data, // 数据信号
isS, isO, //中间信号
assign S_Start_Sig = isS; //端口信号
assign O_Start_Sig = isO;
“仿顺序操作”的建模都有标志性的“ 模块构造”,
就是所有模块都拥有“ Start_Sig”和“ Done_Sig”。
“ Start_Sig”如同 C 语言中的调用指令,
“ Done_Sig”如同 C 语言的返回指令。
这两个信号的存在就是为了控制模块的调用。
计数器:isCount, // 标志寄存器使能着该定时器
Count1, // 计数到1ms
Count_MS, // 技术多少个1ms
rTimes, // 计数次数
4、模块命名方式及模块信号注释:
sos_modulesos_control_modules_moduleo_module
sos_control_module U3( .CLK( CLK ), .RSTn( RSTn ), .Start_Sig( Start_Sig ), // input - from top .S_Done_Sig( S_Done_Sig ), // input - from U1 .O_Done_Sig( O_Done_Sig ), // input - from U2 .S_Start_Sig( S_Start_Sig ), // output - to U1 .O_Start_Sig( O_Start_Sig ), // output - to U2 .Done_Sig( Done_Sig ) // output - to top );
5、常用定时器 计数器模板
/****************************************/ parameter T1MS = 16'd49_999; //开发板使用的晶振为50MHz,50M*0.001-1=49_999/***************************************/reg [15:0]Count1;always @ ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 <= 16'd0; else if( Count1 == T1MS ) Count1 <= 16'd0; else if( isCount ) Count1 <= Count1 + 1'b1; else if( !isCount ) Count1 <= 16'd0;
/****************************************/ reg [9:0]Count_MS;always @ ( posedge CLK or negedge RSTn ) if( !RSTn ) Count_MS <= 10'd0; else if( Count_MS == rTimes ) Count_MS <= 10'd0; else if( Count1 == T1MS ) Count_MS <= Count_MS + 1'b1;/******************************************/
6、仿顺序操作状态机:
always @ ( posedge CLK or negedge RSTn ) if( !RSTn ) begin i <= 4'd0; isO <= 1'b0; isS <= 1'b0; isDone <= 1'b0; end else if( Start_Sig ) case( i ) 4'd0: if( S_Done_Sig ) begin isS <= 1'b0; i <= i + 1'b1; end else isS <= 1'b1; 4'd1: if( O_Done_Sig ) begin isO <= 1'b0; i <= i + 1'b1; end else isO <= 1'b1; 4'd2: if( S_Done_Sig ) begin isS <= 1'b0; i <= i + 1'b1; end else isS <= 1'b1; 4'd3: begin isDone <= 1'b1; i <= 4'd4; end 4'd4: begin isDone <= 1'b0; i <= 4'd0; end default: begin isDone <= 1'b0; i <= 4'd0; end endcase /*****************************************/
- 读书笔记(Verilog HDL那些事儿_建模篇0)
- 读书笔记(Verilog HDL那些事儿_建模篇1)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的基础(二)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--不是“编程”是“建模”(四)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--听听低级建模的故事(五)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的资源(六)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的基础实例(七)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模 仿顺序操作(十二)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--系统建模(二十三)
- Verilog HDL的建模
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--我眼中的FPGA 和Verilog HDL(一)
- Verilog HDL Behavioral Modeling (Verilog HDL 行为建模)
- 【FPGA黑金开发板】Verilog HDL那些事儿--倾向并行操作(三)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--数码管电路驱动(八)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--PS2解码(九)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)
- 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--串口模块(十一)
- _STDCALL&_CDECL 调用约定
- 在页面上用action传递参数到后台出现乱码的解决方法
- Linux系统Load average负载详细解释
- 2016年4月编程语言排行榜 Visual Basic正渐行渐远
- 解决IDEA自动重置LanguageLevel和JavaCompiler版本的问题
- 读书笔记(Verilog HDL那些事儿_建模篇0)
- 用ANN对自己的数据集分类
- 梳理caffe代码im2col(十七)
- java序列化和serialVersionUID
- java异常处理 try catch finally
- 教务管理系统-Struct2注解使用拦截器(Interceptor)
- muleESB的第一个开发实例-HelloWorld(二)
- 使用PHP的ZipArchive类实现多个文件的zip压缩包打包下载
- synchronized关键字