(资料图)
// input clock;rest_n; // n表示低电平复位//outputo_data;
module module_a( // module是关键字表示声明一个模块 // module module名 // module .. endmodule是一对 // module module_name(模块的输入输出列表); // 输入只能是wire变量,只有线才能连入module // 输出可以是wire类型也可以是reg类型,一般是reg变量 // 不写位宽,默认是1bit位宽的 input wire clk, input wire rest_n, output reg [7:0] o_data // 8bit数据);endmodule
module Lut_m(input wire sclk,input wire rst_n,input wire [9:0] i_data,input wire [15:0] i_sin,output reg [15:0] o_cos,output reg o_div_clk,output reg [9:0] div_clk, // module中包含子module // 嵌套子模块,就是例化,首先要先将子模块写成单独的模块 // 例化:先写模块的名字 例化的名字 sub_m u_sub_m ( // 如何引入接口 //用点的方式先写模块的接口(接入的接口) .sclk (sclk), .rst_n (rst_n), .i_data (i_data), .i_sin (i_sin), .o_cos (o_cos), .o_data (o_data) ); sub_n u_sub_n( .sclk (sclk), .rst_n (rst_n), .i_data (i_data), .i_sin (i_sin), .o_data (o_data) ););endmodule
// 输入50MHz,二分频module div_clk( input wire sclk, input wire rst_n, output reg div_clk_o); // 分频器,需要一个计数器,二分频,需要记录01状态,1bit // div_cnt就是一个计数器 // 计数器为0的时候,输出为低,计数器为1的时候,输出为高 reg div_cnt; //寄存器使用always语句进行赋值的 // 这是一种异步复位的写法 // 在时钟上升沿的时候触发逻辑 // 复位使用作用下实现复位逻辑 // 计数器逻辑 always@(posedge sclk or negedge rst_n) begin if(rst_n == 1"b0) begin div_cnt <= 1"b0; end else begin div_cnt <= div_cnt + 1"b0; end end // 产生div_sclk_o always@(posedge sclk or negedge rst_n) begin if(rst == 1"b0) begin div_cnt <= 1"b0; end else if(div_cnt == 0) begin div_clk_o <= 1; end else div_clk_o <= 0; endendmodule
8分频 -- 4周期反转一次4分频 -- 2周期反转一次3分频 -- 1.5周期/3周期5分频 -- 2.5周期/5周期7分频 -- 3.5周期/7周期
后期会补充分频器和计数器的书写方式
关键词:
Copyright 2015-2023 华夏供销网版权所有 备案号: 琼ICP备2022009675号-37 联系邮箱:435 227 67@qq.com