牛客网上面有FPGA的刷题平台,打算暑假把上面的题刷了,代码思路给大家分享


目录

4选1多路选择器

异步复位的串联T触发器

奇偶校验

移位拼接乘法

位拆分与运算


4选1多路选择器

这道题用组合逻辑,sel选择信号的状态已经给出,可以通过case语法,sel为不同值的时候,输出选择不同,代码如下:

`timescale 1ns/1ns
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_reg;//定义一个寄存器用来放输入always@(*)begincase(sel)2'b10:mux_out_reg=d1;2'b01:mux_out_reg=d2;2'b00:mux_out_reg=d3;2'b11:mux_out_reg=d0;default:mux_out_reg=d0;endcaseendassign mux_out=mux_out_reg;//*************code***********//
endmodule

异步复位的串联T触发器

这个题首先需要明确T触发器的特点,就是输出为输入的翻转(关于各种触发器可以看着这篇:(1条消息) (数电)各种触发器汇总——FPGA八股文(1)_居安士的博客-CSDN博客)

题目中所谓“串联”,就是把第一个T触发器的输出作为下一个触发器的输入,具体代码如下:

`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q
);
//*************code***********//reg q0;//定义中间变量q0always@(posedge clk or negedge rst)beginif(!rst)begin//rst低电平复位q0<=1'd0;endelse if(data)begin//T触发器即为翻转触发器q0<=~q0;endelse beginq0<=q0;endendalways@(posedge clk or negedge rst)beginif(!rst)beginq<=1'd0;endelse if(q0)begin//T触发器即为翻转触发器q<=~q;endelse beginq<=q;endend//*************code***********//
endmodule

奇偶校验

奇偶校验:指的是一个数的二进制有多少个1,奇数个1结果为1,偶数个1结果为0

比如9的二进制为4'b1001,1的个数为偶数2,奇偶校验就应该为0

奇偶校验最方便的实现方法就是用异或符^(相异为1,相同为0),叫一个数每一位自己进行异或,不管有多少个数,只要1的个数和0不同(1个数为奇数),结果就会输出为1

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
wire check_temp;//定义一个异或结果assign check_temp=^bus;//按位异或,可以检测二进制数字个数是奇数还是偶数
assign  check=sel ? check_temp:~check_temp;//sel为1输出check_temp,否则输出~check_temp//*************code***********//
endmodule

还有一些常见的单目运算实现的功能:

检验一个数是否全为1:结果=&data;     data不含0才会结果=1

检验一个数是否全为0:结果=|data;       data不含1才会结果=0

移位拼接乘法

根据波形图,d的第3个输出6只持续了一个周期,但是输出依然为4个数,所以每个数输入之后都要先寄存,之后我们乘1、3、7、8,都使用这个寄存的数,而不是用当前d的值

`timescale 1ns/1ns
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;//设置计数器记乘法运算数的个数always@(posedge clk or negedge rst)beginif(~rst)begincnt<=2'd0;          endelse begincnt<=cnt+2'd1; //0~3一共4个数endendreg [7:0] d_reg;//d的寄存器always@(posedge clk or negedge rst )beginif(~rst)beginout<=11'd0;d_reg<=8'd0;input_grant<=1'd0;endelse begincase(cnt)2'b00:begin//乘1  d_reg<=d;out<=d;input_grant<=1'd1;end2'b01:begin//乘3out<=d_reg+(d_reg<<1);//乘2(左移1位)+1input_grant<=1'd0;end2'b10:begin//乘7out<=(d_reg<<1)+(d_reg<<2)+d_reg;//乘4+乘2+1input_grant<=1'd0;end2'b11:begin//乘8out<=(d_reg<<3);//乘8(左移3位)input_grant<=1'd0;end                   endcaseendend//*************code***********//
endmodule

乘2的次方的数,可以通过移位实现

不是2的次方的数,可以通过移位在进行加减运算

位拆分与运算

 

这个题目主要考察的是数据的位提取,想要提取一个数的某几位,data[高位:低位]

`timescale 1ns/1nsmodule data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,output [4:0]out,
output validout
);
//*************code***********//reg [15:0]d_reg;//输入寄存器reg validout_reg;reg [4:0]out_reg;//赋值需要reg型,输出为wire型,所以需要自己加寄存器always@(posedge clk or negedge rst)beginif(~rst)beginout_reg<=5'd0;validout_reg<=1'd0;d_reg<=16'd0;endelse begincase(sel)2'b00:begind_reg<=d;out_reg<=5'd0;validout_reg<=1'd0;end2'b01:beginout_reg<=d_reg[3:0]+d_reg[7:4];validout_reg<=1'd1;end2'b10:beginout_reg<=d_reg[3:0]+d_reg[11:8];validout_reg<=1'd1;end2'b11:beginout_reg<=d_reg[3:0]+d_reg[15:12];validout_reg<=1'd1;endendcaseendendassign out=out_reg;assign validout=validout_reg;
//*************code***********//
endmodule

FPGA刷题P1:4选1多路选择器、异步复位的串联T触发器、奇偶校验、移位拼接乘法相关推荐

  1. 跟着小梅哥初学FPGA ,vivdao开发平台,二选一多路选择器。

    今天正式开始自己的FPGA自学之路,由于导师项目需要,xilinx ZYNQ 7系列的板子,vivado软件平台进行开发,所以自己也直接学习vivado软件开发的板子,我自己学习所用的开发板是xili ...

  2. FPGA _Verilog HDL_8选一多路选择器设计

    一.题目 熟悉QuartusII软件,并设计一个8选1多路选择器,并完成其仿真波形图(贴图). 二.源代码 //-------------------------------------------- ...

  3. Verilog学习日志(4选一多路选择器)

    初次接触硬件设计相关的东西,对学习过程进行一下记录. 首先根据书上内容设计了一个简单的二选一选择器 Verilog代码如下: module mux2_1 #( parameter DW = 32 // ...

  4. 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)

    <剑指Offer>Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈) 传送门:<剑指Offer刷题总目录> 时间:2020-06-19 ...

  5. FPGA(1)--VHDL--6选1数据选择器

    文章目录 一.实验目的 二.实验内容 三.实验设计 四.实验结果及仿真 五.实验思考与总结 一.实验目的 掌握用VHDL语句进行组合电路设计的方法,并熟悉程序的编译.调试与波形图的仿真. 二.实验内容 ...

  6. Verilog数字系统设计——4 选1 多路选择器

    Verilog数字系统设计--4 选1 多路选择器 题目 试分别使用assign.门级原语和always 语句设计4 选1 多路选择器,并写出测试代码进行测试.要求编制测试模块对实现的逻辑功能进行完整 ...

  7. 四选一多路选择器MUX41a

    四选一多路选择器的代码如下,保存路径不能有中文!! 文件名保存为模块名. (Cyclone III-----EP3C40Q240C8) 编译无错误后: File-New-VMF Edit--Inser ...

  8. 利用Block Design在Vivado实现三位四选一多路选择器

    一.要求:利用Block Design设计一个三位 4 选 1 多路选择器电路 二.实验原理: 真值表: Block Design原理图 三.设计过程 Block Design 将自己编写的与门,非门 ...

  9. Verilog门级实现二选一多路选择器

    使用门级电路实现1位二选一多路选择器. 通过真值表设计电路: 使用Verilog门级实现: module MUX2X1(A0,A1,S,Y);//命名 input A0,A1,S;//输入,全部为1位 ...

最新文章

  1. github下载慢,轻松提速教程
  2. C#中Hashtable表的应用
  3. MySQL--Delete语句别名+LIMIT
  4. windows python3.2 shell环境(python叫做解释器)
  5. linux网络配置相关命令
  6. PyCharm新建项目-运行第一个helllo Python程序
  7. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
  8. Linux内核分析——操作系统是如何工作的
  9. Count-Min Sketch 算法
  10. 交叉编译 -sh: ./xxx: not found 的问题
  11. 笔记31 笨办法学python练习39可爱的词典
  12. 海洋cms采集后无法播放解决方法
  13. 家居装修行业APP开发解决方案
  14. (完美)华为nova2 PIC-AL00的USB调试模式在哪里打开的流程
  15. “51媒体网“媒体邀约,媒体现场采访的优势
  16. python新建word文档_使用Python 自动生成 Word 文档的教程
  17. matlab中cos(pi/2)和sin(pi)不等于0的解决方案
  18. Ubuntu 16.04 64位+Qt 5.7.1+opencv 3.2.0 + opencv_contrib 3.2.0
  19. java第四弹 多态 final static 代码块 抽象类 匿名类 接口 Java8新特性:接口增强
  20. X-editable 文档 中文版

热门文章

  1. Vue ul li 列表 最后一个子元素 “不需要列表横线写法”
  2. CS_Node_Tutorials
  3. 上班太无聊,我要考证 之 软件设计师考证
  4. How to get ‘kernel config‘ when CONFIG_IKCONFIG is not set ? (Method)
  5. Swagger 2(Open API v3.0) Java 文档生成指南(下)
  6. java项目黑科技_黑科技神器-uTools
  7. android 分辨率6,「苹果新闻」iPhone 6的分辨率到底会是多少?
  8. 树莓派ssh连接使用公钥免密登录
  9. 玩转生存分析,这一篇就够了
  10. 今日学习在线编程题:小码哥的属相