网站搭建公司案例网址,济南专业网站优化,wordpress标签云代码,网站怎样做反向链接verilog编程题 文章目录 verilog编程题序列检测电路#xff08;状态机实现#xff09;分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路#xff08;状态机实现#xff09; module Detect_101(input clk,input rst_n,input data,o…verilog编程题 文章目录 verilog编程题序列检测电路状态机实现分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路状态机实现 module Detect_101(input clk,input rst_n,input data,output flag_101);parameter S0 0,S1 1,S2 2,S3 3;reg [1:0] state;always (posedge clk or negedge rst_n)beginif(rst_n 1b0)beginstate S0;endelse begincase(state)S0: if(data 1)state S1;else state S0;S1: if(data 0)state S2;else state S1;S2:if(data 1)state S3;else state S0;S3:if(data 1)state S1;else state S2;default:state S0; endcaseend
endassign flag_101 (state S3)? 1b1: 1b0;endmodule分频电路
采用触发器反向输出端连接到输入端的方式可构成简单的 2 分频电路。
以此为基础进行级联可构成 4 分频8 分频电路。
按题目要求几分频就留哪个。
module even_divisor# (parameter DIV_CLK 10 )(input rstn ,input clk,output clk_div2,output clk_div4,output clk_div10);//2 分频reg clk_div2_r ;always (posedge clk or negedge rstn) beginif (!rstn) beginclk_div2_r b0 ;endelse beginclk_div2_r ~clk_div2_r ;endendassign clk_div2 clk_div2_r ;//4 分频reg clk_div4_r ;always (posedge clk_div2 or negedge rstn) beginif (!rstn) beginclk_div4_r b0 ;endelse beginclk_div4_r ~clk_div4_r ;endendassign clk_div4 clk_div4_r ;//N/2 计数reg [3:0] cnt ;always (posedge clk or negedge rstn) beginif (!rstn) begincnt b0 ;endelse if (cnt (DIV_CLK/2)-1) begincnt b0 ;endelse begincnt cnt 1b1 ;endend//输出时钟reg clk_div10_r ;always (posedge clk or negedge rstn) beginif (!rstn) beginclk_div10_r 1b0 ;endelse if (cnt (DIV_CLK/2)-1 ) beginclk_div10_r ~clk_div10_r ;endendassign clk_div10 clk_div10_r ;
endmodule计数器
module Count
(input clk ,input rst_n ,output reg [ 3:0] cnt
);always (posedge clk or negedge rst_n)beginif(!rst_n)cnt 4d0;else if(cnt4d9)cnt 4d0;elsecnt cnt 1b1;
endendmodule译码器
timescale 10ns/1ns
module decode3_8 (data_out,data_in,enable) ;
input [2:0] data_in;
input enable;
output [7:0] data_out;
reg [7:0] data_out;always (data_in or enable)
beginif (enable1)case (data_in )3b000: data_out8b11111110;3b001: data_out8b11111101;3b010: data_out8b11111011;3b011: data_out8b11110111;3b100: data_out8b11101111;3b101: data_out8b11011111;3b110: data_out8b10111111;3b111: data_out8b01111111;default: data_out8bxxxxxxxx;endcaseelsedata_out8b11111111;
endendmodule选择器
代码为4选1如果题目是2选1或者更多选1就case后进行更改
module mux_4_1 (input C, D, E, F,input [1:0] S,output reg Mux_out
);always (C or D or E or F or S) begincase(S)2b00 : Mux_out C;2b01 : Mux_out D;2b10 : Mux_out E;default : Mux_out F;endcase
endendmodule加减器
16位加减法器。当sub为1时是减法当sub为0时是加法。
看题目要求有几位写几位
module top_module(input [31:0] a,input [31:0] b,input sub,output [31:0]sum);
wire [31:0]xor_1;
wire [15:0]sum_1;
wire [15:0]sum_2;
wire cout_1,cout_2;
//xor xor_gate(xor_1,b,sub);//逻辑或我们这里的设计不应该是逻辑或应该是下边的按位取或
assign xor_1 b^{32{sub}} ;//按位异或
assign sum {sum_2,sum_1};
add16 u1_add16(.a(a[15:0]),.b(xor_1[15:0]),.cin(sub),.sum(sum_1),.cout(cout_1));
add16 u2_add16(.a(a[31:16]),.b(xor_1[31:16]),.cin(cout_1),.sum(sum_2),.cout(cout_2));endmodule
触发器
带同步清0、同步置1的D触发器
module D_EF(q,qn,d,clk,set,reset)input d,clk,set,reset;output q,qn;reg q,qn;always (posedge clk)beginif(reset) begin q0;qn1;end//同步清0高有效else if(set) begin q1;qn1;end //同步置1高有效else begin q~d;qn~d;endend endmodule寄存器
有异步清零端的n位寄存器看题目要求有几位n就写几
module regn(D,clk,reset,Q);parameter n16;input [n-1] D;input clk,reset;output [n-1] reg Q;always (negedge reset,posedge clk)if(!reset) //复位端reset低电平有效Q0;elseQD;endmodule