Verilog 基础语法(题目)

这篇具有很好参考价值的文章主要介绍了Verilog 基础语法(题目)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Verilog 基础语法(题目)

**本内容来自 牛客网Verilog基础语法**

1、四选一多路器

制作一个四选一的多路选择器,要求输出定义上为线网类型
状态转换:
d0 11
d1 10
d2 01
d3 00
信号示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
波形示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
输入描述:
输入信号 d1,d2,d3,d4 sel
类型 wire

输出描述:
输出信号 mux_out
类型 wire

module mux4_1(
    input [1:0]d1,d2,d3,d0,
    input [1:0]sel,
    output[1:0]mux_out
    );
    //*************code***********//
    reg [1:0] mux_out_tmp;
    always@(*) begin
        case(sel)
            2'b00:  mux_out_tmp = d3;
            2'b01:  mux_out_tmp = d2;
            2'b10:  mux_out_tmp = d1;
            2'd11:  mux_out_tmp = d0;
            default:    mux_out_tmp = d3;
        endcase
    end
    assign mux_out = mux_out_tmp;
    //*************code***********//
endmodule

2、异步复位的串联T触发器

用verilog实现两个串联的异步复位的T触发器的逻辑,结构如图:
信号示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
波形示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
输入描述:
输入信号 data, clk, rst
类型 wire
在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述:
输出信号 q
类型 reg

module Tff_2 (
    input wire data, clk, rst,
    output reg q  
);
    //*************code***********//
    // 做题之前首先需要知道T触发器的特点:输入为1时,输出进行翻转。
    // 另外需要注意异步复位
    reg tmp;
    always@(posedge clk or negedge rst) begin
        if(~rst)
            tmp <= 0;
        else if(data)
            tmp <= ~tmp;
        else
            tmp <= tmp;
    end

    always@(posedge clk or negedge rst) begin
        if(~rst)
            q <= 0;
        else if(tmp)
            q <= ~q;
        else
            q <= q;
    end
    //*************code***********//
endmodule

3、奇偶校验

现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验,0输出偶校验)
信号示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
波形示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
输入描述:
输入:bus、sel
类型:wire

输出描述:
输出信号:check
类型:wire

module odd_sel(
    input [31:0] bus,
    input sel,
    output check
);
//*************code***********//
// 奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。
// 采用奇数的称为奇校验,反之,称为偶校验。
// bus=0,二进制数 0000,偶数个1 按位异或为0;
// bus=2,二进制数 0010,奇数个1 按位异或为1;
// bus=3,二进制数 0011,偶数个1 按位异或为0;
// bus=8,二进制数 1000,奇数个1 按位异或为1;

// 在Verilog中,^运算符作为单目运算符时的功能是"按位异或",作为双目运算符时的功能是"异或"。
// 当data_in是一个4 bit,的数据时,^data_in = data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[3],简言之,就是^bus,
// 就是检查bus中1的个数是否是成对的,如果成队,那就是为0,也就是偶校验,所以奇校验刚好取反
    assign check = sel ? ^bus : !(^bus);
//*************code***********//
endmodule

4、移位运算与乘法

已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出信号的上升沿表示写入有效)
信号示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
波形示意图:
Verilog 基础语法(题目),Verilog,FPGA,fpga开发
输入描述:
输入信号:d、clk、rst
类型:wire
在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述:
输出信号:input_grant、out
类型:reg

分析:
题意整理:

  1. 在硬件中进行乘除法运算是比较消耗资源的一种方法,想要在不影响延迟并尽量减少资源消耗,必须从硬件的特点上进行设计。
  2. 根据寄存器的原理,由于是二进制,所以进位和退位为x2或者/2,同样除7可以使用进位3然后减去本身的做法,这样就将乘除法运算转化为位运算,这是一种比较简单的整数运算处理。
  3. 需要给出一个计数器的状态机,注意d输入不是随时有效的,只有在cnt计数为0的那个时钟沿,d输入有效,因此需要设计一个寄存器din,在cnt为0时候锁存d的值

解体主体:
根据题意分析,可以得到状态转换:
设输入为d,计数器为cnt
移位运算逻辑:

乘数 位运算
1 d
3 (din<<2)-din
7 (din<<3)-din
8 (din<<3)

状态机逻辑:文章来源地址https://www.toymoban.com/news/detail-673010.html

cnt out input_grant
0 直接输出d,并寄存d的值为din 1
1 (din<<2)-din 0
2 (din<<3)-din 0
3 (din<<3) 0
将电路转换成Verilog代码描述如下:
module multi_sel(
    input [7:0]d,
    input clk,
    input rst,
    output reg input_grant,
    output reg [10:0]out
);
//*************code***********//
    reg [1:0] cnt;
    reg [7:0] din;

    always @(posedge clk or negedge rst) begin
        if(!rst) begin
            cnt <= 0;
            out <= 0;
            input_grant <= 0;
            din <= 0;
        end
        else begin
            cnt <= cnt + 1;
            case (cnt)
                0:  begin
                    din <= d;
                    input_grant <= 1;
                    out <= d;
                end
                1:  begin
                    input_grant <= 0;
                    out <= (din<<2)-din;
                end
                2:  begin
                    input_grant <= 0;
                    out <= (din<<3)-din;
                end
                3:  begin
                    input_grant <= 0;
                    out <= (din<<3);
                end
            endcase
        end
    end
//*************code***********//
endmodule

到了这里,关于Verilog 基础语法(题目)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA入门】第一篇、Verilog基本语法常识

    目录 第一部分、不同的变量类型 1、wire和reg的区别  2、如何对变量进行赋值呢? 3、什么是阻塞?什么是非阻塞? 第二部分、变量位宽的定义 1、各种系统默认情况 2、变量位宽声明方式 3、表明位宽的情况下,赋值方式 4、两个模块之间例化,不定义变量直接用的方式 5、常

    2024年02月04日
    浏览(52)
  • 【FPGA学习记录3-1】Verilog语法之Verilog的数据类型

    写在前面 本科时学过FPGA的相关课程,因此对于Verilog相关语法的学习重在回顾。 1.Verilog的数据类型 Verilog 最常用的 2 种数据类型就是 线(wire)与寄存器(reg) ,其余类型可以理解为这两种数据类型的扩展或辅助。 1.1wire类型 wire 类型表示硬件单元之间的物理连线,由其连接

    2024年02月02日
    浏览(46)
  • FPGA学习笔记-知识点3-Verilog语法1

    按其功能可分为以下几类: 1) 算术运算符(+,-,×,/,%) 2) 赋值运算符(=,=) 3) 关系运算符(,,=,=) 4) 逻辑运算符(,||,!) 5) 条件运算符( ? :) 6) 位运算符(,|,^,,^) 7) 移位运算符(,) 8) 拼接运算符({ }) 9) 其它 按其所带操作数的个数运算符可分为三种: 1) 单目运算符(unary operator):可以带一个

    2024年02月06日
    浏览(56)
  • 【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计

    学习新语法,争做新青年 计数器实验升级,让8个LED灯每个0.5s的速率循环闪烁,流水灯ahh好久不见~ 去年光这个就把我折磨够呛。。我肉眼可见的脱发就是从那时候开始的。。在那两个月我直接掉了10斤啊喂~ (没节食、没运动、没失恋哈哈哈 产生0.5s周期的计数器 为了避免仿

    2024年02月11日
    浏览(45)
  • FPGA基础概念_Verilog

     一、文件尾缀含义等常识 sof文件时编译(分析、综合、布线、生成、时序)过程中生成的一个文件,可通过Jtag下载到FPGA的SRAM中去执行. pof文件生成过程同上,但不同之处在于不能直接下载到FPGA的SRAM中,需要通过ASP端口直接下载到FPGA的配置芯片中,配置芯片一般时串行F

    2024年02月03日
    浏览(47)
  • FPGA基础语法

    一、逻辑值        0:表示低电平,对应电路GND;        1:表示高电平,对应电路VCC;        X:表示未知,可为高电平,也可为低电平;        Z:表示高阻态,外部没有激励信号,是一个悬空状态。 二、进制的表示        二进制:eg:0101表示为4’b0101,其中4:表示

    2024年02月12日
    浏览(30)
  • FPGA设计Verilog基础之Verilog的运算符

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus FPGA设计Verilog基础之Verilog的运算符 Verilog是一种硬件描述语言,支持多种运算符,包括算术运算符、比较(关系)运算符、逻辑运算符、条件

    2024年02月03日
    浏览(50)
  • 避免latch verilog FPGA 基础练习2

    发现问题,用技术解决问题。兴趣是自己的源动力 ! 本文由如何避免latch的问题场景,来更详细的描述verilog中的组合逻辑电路和时序逻辑电路等等理论知识。由latch这个问题入手来阐述更多理论知识,有助于更好的理解和记忆。 Latch其实就是锁存器,是一种在异步电路系统中

    2024年02月04日
    浏览(41)
  • FPGA设计Verilog基础之Verilog全局变量和局部变量定义

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   在Verilog中,变量可以分为全局变量和局部变量两种类型。全局变量在整个模块中都可以使用,而局部变量只能在某个特定的代码块中使用。

    2024年02月15日
    浏览(39)
  • 【FPGA基础入门实践】Verilog 基本项目操作逐步演示

    0x00 回顾:AND/OR/NOT 逻辑的特性 AND: 与门可以具有两个或更多的输入,并返回一个输出。当所有输入值都为 1 时,输出值为 1。如果输入值中有任何一个为 0,则输出值为 0。 OR: 或门可以具有两个或更多的输入,并返回一个输出。如果输入值中至少有一个为 1,则输出值为

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包