欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

锆石FPGA---verlog语法篇

发布时间:2023/12/16 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 锆石FPGA---verlog语法篇 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Verilog HDL

概述

Verilog vs VHDL

Verilog :快速入门
VHDL:入门时间长

数字逻辑

0 1 x z

数据类型

寄存器 线网 参数

  • reg
    • 使用:always,initial
    • 综合: 时序-寄存器 组合-硬件连线 混合-锁存器
  • wire
    • 默认为 z
  • parameter
  • 运算符

    ±*/%

    > < =

    ! && ||

    == !=

    a ? b: c
    & | ^ ~^ ^~

    << >>

    { 拼接} {2’d2{b}}

    基础语法

    可综合语句:可以生成电路
    不可综合语句:用来仿真

    可综合关键字:
    module end module
    input output inout
    wire reg parameter
    always assign
    if else begin end case end case default
    posedge negedge or 上升 下降

    基本框架

    例实现与门

    module yumen(a,b,c)input a;input b;output c;assign c=a&b;endmodule

    描述方式

    分类:系统级、算法级、RTL级、门级、开关级

  • 结构化描述
  • module example (A,B,C,L);input A; input B; input C; output L;wire AB,BC,AC; and U1(AB,A,B); and U2(BC,B,C); and U3(AC,A,C);or U4(L,AB,BC,AC);endmodule
  • 数据流描述
  • assign L=((!A)&B&C)|((!B)&A&C)|((!C)&B&A); endmodule
  • 行为描述
  • always@(A,C,B) begin case({A,B,C})3'b000: L=1'b0;3'b001: L=1'b0;3'b010: L=1'b0;3'b011: L=1'b1;3'b100: L=1'b0;3'b101: L=1'b1;3'b110: L=1'b1;3'b111: L=1'b1;default:L=1'bx;endcase end
  • 模块化设计
  • module Example_Module (input a,input b,output c,output s);Example_yumen yumen_module (.yumen_a(a),.yumen_b(b),.yumen_c(c) ); Example_yihuo yihuo_module (.yihuo_a(a),.yihuo_b(b),.yihuo_c(s) ); endmodule

    问题

  • 数据类型选择
    • reg
    • wire
  • latch的产生(保持不变)
    • 产生情况:if else缺省
    • 时序和组合区别
  • 组合逻辑反馈环,导致不稳定,时序实现反馈
    • 表达式左右具有相同元素
  • 阻塞赋值=、非阻塞<=
    • 阻塞:顺序执行 非阻塞:并行执行
    • 阻塞:同时改变 非阻塞:有时间延迟

    状态机

    • 可以实现顺序时间,第一步、第二部、、、
  • 分类
    • Mealy
    • Moore
  • 组成
    • 时序逻辑:记忆当前状态
    • 组合逻辑:次态逻辑(确定下一个状态),输出逻辑(确定状态机输出)
  • 设计步骤
    • 确定状态机类型
    • 列出状态机所有状态,编码
    • 列举状态图、状态表
    • 描述状态
  • 状态编码
    • 二进制码:编码效率高,译码
    • 格雷码:高可靠性
    • one-hot:位数资源多,每一位表示一种状态
  • 描述方式
    • 一段:可读性差
    • (二段):有毛刺
    • (三段)

    案例:自动售货机

    module Example_State (X,Z,CLK_50M,RST_N );input X; input RST_N; input CLK_50M;output Z; //X表示是否投入一元 //Z是否售出饮料reg Z; reg Z_N;parameter S0=2'b00; parameter S1=2'b01; parameter S2=2'b10;reg[1:0] FSM_CS; //current reg[1:0] FSM_NS;//Next state//时序逻辑 always @(posedge CLK_50M or negedge RST_N) beginif(!RST_N)//lowFSM_CS<=S0;elseFSM_CS<=FSM_NS; end //组合逻辑(次态逻辑) always @(*) begincase(FSM_CS)S0:begin if(X==1'b1)FSM_NS=S1;elseFSM_NS=S0;endS1:begin if(X==1'b1)FSM_NS=S2;elseFSM_NS=S1;endS2:begin if(X==1'b1)FSM_NS=S0;elseFSM_NS=S2;endendcase end//组合逻辑(输出逻辑)always @(posedge CLK_50M or negedge RST_N) beginif(!RST_N)//lowZ<=1'b0;elseZ<=Z_N; endalways@ (*) beginif((FSM_CS==S2)&&(X==1'b1))Z_N=1'b1;elseZ_N=1'b0; endendmodule

    总结

    以上是生活随笔为你收集整理的锆石FPGA---verlog语法篇的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。