FPGA笔试题
FPGA小学生
控制科学与工程硕士在读。
展开
-
乒乓操作(Verilog)
RTL代码:module fsm( input clk, input rst_n, input [7:0]data_in, output reg[7:0]data_out); reg [7:0]data_buffer1; reg [7:0]data_buffer2; reg wr_buf1; reg wr_buf2; reg [1:0]c_state; reg [1:0]n_state; parameter s0 = 2'b01; parameter s1 = 2'b10;原创 2021-09-14 11:24:18 · 2162 阅读 · 0 评论 -
串并转换(Verilog)
RTL代码:module serial_parallel( input clk, input rst_n, input en, input data_in, //一位输入 output reg[7:0] data_out //8位并行输出 ); //移位寄存器方式 always @(posedge clk or negedge rst_n) begin if (!rs原创 2021-09-14 10:46:05 · 2408 阅读 · 1 评论 -
统计第一个出现的1后面0的个数(Verilog)
RTL代码:module fsm( input clk, input rst_n, input start, input [7:0]data, output reg[3:0]count_out); reg [3:0]cnt; reg en; reg [7:0]data_r; always@(posedge clk or negedge rst_n)begin if(!rst_n) en <= 1'b0; else if(start) en <= 1原创 2021-09-13 22:14:09 · 1188 阅读 · 0 评论 -
非整数倍位宽转换(Verilog)
RTL代码:module fsm( input clk, input rst_n, input [7:0]data_in, output reg [11:0]data_out); reg [11:0]data_out_r1; reg [11:0]data_out_r2; reg [1:0]cnt; always@(posedge clk or negedge rst_n)begin if(!rst_n) cnt <= 'd0; else if(cnt == 'd原创 2021-09-13 16:45:25 · 1208 阅读 · 0 评论 -
统计1的个数(Verilog)
RTL代码:module test( input [7:0]data_in, output [3:0]out);// 写法一: reg [3:0]width; reg [3:0]cnt; always@(data_in)begin cnt = 'd0; for(width = 0; width < 8; width = width + 1)begin if(data_in[width]) cnt = cnt + 1'b1; else cnt =原创 2021-09-07 16:23:22 · 13590 阅读 · 5 评论 -
异步FIFO设计实现(Verilog)
RTL代码:module asyn_fifo #( parameter data_width = 16, parameter data_depth = 8, parameter ram_depth = 256 ) ( input rst_n, input wr_clk, input wr_en, input [data_width-1:0] data_in, output full,原创 2021-08-27 16:05:00 · 1977 阅读 · 9 评论 -
实现同步FIFO(Verilog)
FPGA内部资源是嵌入式块RAM,所以如果在FPGA内部想要实现FIFO,并不是FPGA内部就有实实在在的FIFO模块,FIFO模块都是由RAM变换而来,所以也就可以说成是嵌入式块RAM使用之FIFO。使用IP核的方式实现FIFO非常简单,本篇文章是用Verilog来实现一个同步FIFO,注意不管同步FIFO还是异步FIFO,内部都需要体现RAM资源的使用:Verilog实现FIFO代码:module fifo#( parameter DATA_WIDTH = 8, parameter D原创 2021-06-09 17:24:39 · 1246 阅读 · 2 评论 -
实现异步复位同步释放(Verilog)
1. 异步复位一般让复位信号低电平有效,复位信号不受时钟的控制,只要复位信号有效,那么电路就会复位。对应的写法为:always @ (posedge clk or negedge rst_n) begin if (!rst_n) xxxx; else xxxx;endalways块中,敏感量为两个,一个是时钟信号的上升沿,一个是复位信号的下降沿,当复位信号下降沿出现时,不论时钟信号在什么状态,都执行复位。2. 同步复位同步复位,即如果复位信号有原创 2021-06-09 20:04:13 · 6830 阅读 · 2 评论 -
奇数分频和偶数分频(Verilog)
奇数分频和偶数分频在FPGA中可以使用PLL很容易实现,也可以用Verilog实现奇数分频和偶数分频,偶数分频相对来说比较简单,奇数分频需要利用系统时钟的上升沿和下降沿来进行分频。奇数分频和偶数分频都是以系统时钟为基准,然后进行计数,具体什么时间翻转电平是有公式的,只要把公式记住,实现分频轻而易举:偶数分频(50%占空比):上升沿N/2-1翻转奇数分频(50%占空比):上升沿:上升沿(N-1)/2-1翻转下降沿:下降沿(N-1)翻转偶数分频Verilog代码:module clk_div_ev原创 2021-06-10 09:19:34 · 4346 阅读 · 1 评论 -
跨时钟域信号传输(Verilog)
本篇着重讲解单bit信号由快时钟域到慢时钟域的转化。对于跨时钟域信号的处理,方法我们都知道:单bit:两级触发器同步(适用于慢到快)多bit:采用异步FIFO,异步双口RAM 加握手信号 格雷码转换对于多bit信号来说我们想要跨时钟域处理直接使用fifo就可以了。如果对于单bit信号来说,慢时钟域到快时钟域使用两级触发器就可以,代码如下图所示://---------慢时钟域到快时钟域----------//module mul_clk( input clk, //快时钟域时钟原创 2021-06-10 10:55:24 · 3360 阅读 · 2 评论 -
时钟无毛刺切换电路(Verilog)
用Verilog实现glitch free时钟切换电路,输入clka,clkb,rst_n,sel,sel为1输出clka,sel为0输出clkb(clka和clkb为不同源时钟):RTL代码:module glitch_clk( input clka, input clkb, input rst_n, input sel, output outclk); reg sel_a; reg sel_a_r; reg sel_b; reg sel_b_r; always@(pos原创 2021-07-20 16:21:26 · 1763 阅读 · 0 评论 -
按键抖动消除电路(Verilog)
用Verilog实现按键抖动消除电路,抖动时间可以设置。RTL代码:module key_glitch #( parameter CNT_KEY = 6 )( input clk, input rst_n, input key_in, output reg key_flag); reg [7:0]cnt; reg key_in_r0; reg key_in_r1; wire key_edge; always@(posedge clk or negedge rst_n)原创 2021-07-20 17:19:59 · 1686 阅读 · 0 评论 -
单bit信号由快到慢跨时钟域(Verilog)
代码:module signal_clock( input clk_a, input rst_n_a, input signal_a, input clk_b, input rst_n_b, output signal_b); reg state_a; reg state_b1; reg state_b2; reg state_b3; //将signal_a脉冲信号转化为沿信号 always@(posedge clk_a or negedge rst_n_a)begin原创 2021-07-29 10:13:35 · 945 阅读 · 0 评论 -
Moore状态机(Verilog)
题目:用三段式moore型状态机实现序列“1011”的不重叠检测。注意点:三段式状态机,Moore状态机,不重叠检测。代码:module fsm( input clk, input rst_n, input data_in, output reg data_out); reg [4:0]c_state; reg [4:0]n_state; parameter s0 = 5'b00001; parameter s1 = 5'b00010; parameter s2 = 5'b原创 2021-07-29 10:48:21 · 2362 阅读 · 0 评论 -
排序(Verilog)
RTL代码:module sort( input clk, input rst_n, input sort_start, output reg sort_end, output reg [7:0]data_out); //输入要排序的数组 wire [7:0]data_in[7:0]; assign data_in[0] = 8'd5; assign data_in[1] = 8'd8; assign data_in[2] = 8'd9; assign data_in[3]原创 2021-08-24 12:12:11 · 4104 阅读 · 3 评论 -
单bit信号进行毛刺滤除(Verilog)
RTL代码:module filter( input clk, input rst_n, input data_in, output reg data_out); reg data_in_r; wire data_edge; reg [2:0]cnt; always@(posedge clk or negedge rst_n)begin if(!rst_n) data_in_r <= 1'b0; else data_in_r <= data_in;原创 2021-07-29 11:50:37 · 4495 阅读 · 0 评论 -
序列检测:状态机和移位寄存器(Verilog)
RTL代码://实现序列1101//状态机实现和移位寄存器两种方式实现//状态机方式:module fsm( input clk, input rst_n, input data_in, output reg flag); reg [4:0]c_state; reg [4:0]n_state; parameter s0 = 5'b00001; parameter s1 = 5'b00010; parameter s2 = 5'b00100; parameter s3 =原创 2021-08-23 18:03:45 · 887 阅读 · 1 评论 -
异步跨时钟域握手处理(Verilog)
RTL代码:module req_ack( input clk_a, input rst_n, input pulse_a, input clk_b, output pulse_b); reg req; //请求信号 reg [2:0]req_b; reg ack; //应答信号 reg [2:0]ack_a; always@(posedge clk_a or negedge rst_n)begin if(!rst_n) req <= 1'b0; else原创 2021-08-23 17:22:44 · 2730 阅读 · 0 评论 -
有符号和无符号相加(vivo)
描述如下代码,实现加法;C = A + B;A是21bit无符号数;B是18位有符号数;如何实现才能保证正确得到一个不溢出的有符号数C;module unsign_sign( input wire [20:0]A, input wire signed [17:0]B, output wire signed [22:0]C);assign C =$signed({1'b0, A})+$signed({{4{原创 2021-08-02 15:41:10 · 858 阅读 · 0 评论 -
Verilog笔试编程题(紫光展锐IC)
请用Verilog RTL描述如下图设计:以clk为基准,设计一个秒计数器,在指定的计数值产生中断,实时输出当前的秒数计数值。(紫光展锐数字IC岗)<1>clk是时钟输入,频率为32.768KHz。<2>rst_n是异步复位输入,低电平有效,复位整个系统,为高则整个系统开始工作,其上升沿已经同步于clk。<3>start是启动信号,一个clk时钟周期的正脉冲,同步于clk。alarm[7:0]是配置信息,单位为秒,同步于clk。<4>工作模式:收到st原创 2021-08-02 11:22:18 · 1420 阅读 · 1 评论