Verilog HDL FPGA 从入门到放弃(1)

      这是一篇入门文章,笔者也曾经迷茫过,也很困惑过,硬件编程是怎么样的,但是功夫不负有心人,希望我的文章获得读者的认同。谦虚使人进步,希望不足之处请提意见,对于有意思的东西大家可以探讨一下。

       硬件编程verilog 建模

      一个简单的模型  

      流水灯的实现

      

概念介绍

软核(SoftCore)verilog VHDL模型          称为软核

固核(FirmCore):电路结构编码文件NetList    称为固核。

硬核(HardCore): 电路结构版图掩模        称为硬核。

整体效果

首先采用Top-down she设计模式  生成的门级网表(NetList)结构如下  

!!!如何查看网表呢?   步骤:Quartus---> Tools--->Netlist

网表 文件如下图所示

接下来 就是子模块的建立

/******************系统硬件要求*******************************

系统时钟  晶振为50MHZ

复位     初始为0,按下为1

LED0

LED1

LED2

LED3

**************************************************/

//=====================================================//


module led0_module(clk,rst,LED_OUT);    //!!!这里要记得加“;”
/*******说明一下*******
输入为时钟和复位
输出为led灯
****************/
input clk;
input rst;
output LED_OUT;
/*******************************************/
Parameter T100MS=23’d5_000_000;//2^23超过5M所以位宽为23位的十进制下的5*10^6


//======接下来制作计数器=======================================
Reg[22:0] Count0;            //寄存器为Count0
always@(posedge clk or negedge rst)
if(!rst)
   Count0<=23’d0;//寄存器清零 
else if(Count0==T100MS)
Count0<=23’d0;//寄存器清零
else 
Count0<=23’d0+1’b1;

//=======接下来制作输出led的寄存器=============
Reg  rLED_OUT;                   //!!!1位寄存器不需要说明
always@(posedge clk or negedge rst)
if(!rst)
   rLED_OUT <=1’b0;//1位二进制清零 
else if(Count0>=23’d0&&Count0<=22’d1_250_000)
rLED_OUT <=1’b1;//寄存器清零
else 
rLED_OUT <=1’b0;
//=============================================
assign LED_OUT= rLED_OUT;
endmodule         //!!!注意这里必须添加 结尾不用”;”
/***************以上为模块1,其余三个模如法复制修改名称就可以************************************/
接下来制作顶层模块
/***************
制作顶层模块时注意最后文件也要保存为module后的名字一定要一致***********************************/
Module top_module(clk,rst, LED_OUT)         //!!!该模块要保存为top_module.v文件
input  clk;
input  rst;
output[3:0]  LED_OUT;                       //输出四盏灯

wire led0_out;                              //wire 表示物理量
module  led0_module
(
.clk(clk),
. rst(rst),
.LED_OUT(led0_out)
);
wire led1_out;                              //wire 表示物理量
module  led1_module
(
.clk(clk),
. rst(rst),
.LED_OUT(led1_out)
);
wire led2_out;                              //wire 表示物理量
module  led2_module
(
.clk(clk),
. rst(rst),
.LED_OUT(led2_out)
);

wire led3_out;                              //wire 表示物理量
module  led3_module
(
.clk(clk),
. rst(rst),
.LED_OUT(led3_out)
);
assign LED_OUT ={ led3_out , led2_out , led1_out , led0_out };// assign表示连续赋值

endmodule
最终实现一个流水灯,基本建模就完成了



    




 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值