当前位置: 首页 > news >正文

做图表的网站wordpress文件存放不同目录下

做图表的网站,wordpress文件存放不同目录下,企业管理培训课程目录,上海十大装修公司品牌信号发生器 方波#xff0c;就是一段时间内都输出相同的信号 锯齿波就是递增 三角波就是先增后减 加减计数器 当mode为1则加#xff0c;Mode为0则减#xff1b;只要为0就输出zero 这样会出问题#xff0c;因为要求是十进制#xff0c;但是这里并没有考虑到9之后怎么办就是一段时间内都输出相同的信号 锯齿波就是递增 三角波就是先增后减 加减计数器 当mode为1则加Mode为0则减只要为0就输出zero  这样会出问题因为要求是十进制但是这里并没有考虑到9之后怎么办所以就会使number输出超过9应该额外要添加十进制的边缘判断即mode为1要加的时候也要判断一下是不是要继续加而不是直接加 简易秒表 输出端口second为1~60到60时minute1分到60时停止计数 秒的确定 分的确定 可置位计数器 就是有置位信号时把当前数字置为要置的数字 然后要确定是十六进制 额外逻辑 串转并 输入端输入单位信号累积到6个后输出一个六位的信号 reg [5:0] data_reg;reg [2:0] data_cnt;always (posedge clk or negedge rst_n ) beginif(!rst_n)ready_a d0;elseready_a 1d1;endalways (posedge clk or negedge rst_n ) beginif(!rst_n)data_cnt d0;else if(valid_a ready_a)data_cnt (data_cnt 3d5) ? d0 : (data_cnt 1d1);endalways (posedge clk or negedge rst_n ) beginif(!rst_n)data_reg d0;else if(valid_a ready_a)data_reg {data_a, data_reg[5:1]};endalways (posedge clk or negedge rst_n ) beginif(!rst_n)beginvalid_b d0;data_b d0;endelse if(data_cnt 3d5)beginvalid_b 1d1;data_b {data_a, data_reg[5:1]};endelsevalid_b d0;end数据累加输出 当接受到4个输入数据后输出一个这四个数据的累加结果 timescale 1ns/1nsmodule valid_ready(input clk , input rst_n ,input [7:0] data_in ,input valid_a ,input ready_b ,output ready_a ,output reg valid_b ,output reg [9:0] data_out ); reg [1:0] data_cnt;assign ready_a !valid_b | ready_b;always (posedge clk or negedge rst_n ) beginif(!rst_n) data_cnt d0;else if(valid_a ready_a)data_cnt (data_cnt 2d3) ? d0 : (data_cnt 1d1); end always (posedge clk or negedge rst_n ) beginif(!rst_n) valid_b d0;else if(data_cnt 2d3 valid_a ready_a)valid_b 1d1;else if(valid_b ready_b)valid_b 1d0; endalways (posedge clk or negedge rst_n ) beginif(!rst_n) data_out d0;else if(ready_b valid_a ready_a (data_cnt 2d0))data_out data_in;else if(valid_a ready_a)data_out data_out data_in;endendmodule 非阻塞赋值就是把次态给现态就是说右侧的是次态但是现在还不用是下个状态的情况那么条件判断里就是导致其进入下个状态的条件 非整数倍数据位宽转换24to128 数据位宽转换24位转128位先到的数据为高位 也是串转并的一种只不过最后的时候是只要一部分 思路都是先判断输入的有效性有效时就对数据暂存器做出改变对于输出时如果可以输出了即让输出就输出没有使能就不输出依然暂存。 24和128的最小公倍数为384所以每到384的时候就是对齐了一次即完成一次周期 所以每当cnt到51015时就需要输出一次并拉高valid_out一个周期 简单的输入信号计数器表示已经输入了几个24位的信号 数据暂存器每当输入有效时将数据从低位移入注意是低位而且是要在输入有效时操作 输出使能 需要注意的是非阻塞是使的关系即这个clk里收到了信号但是并不在这个周期里即时发生改变而是在下个clk里再发生改变也就使得逻辑上同步的输入输出不是在同一个周期上发生而是先有输入才有下个周期对应的输出每个周期输出的都是上个周期的结果。当下输入的数据在下个周期出结果 但在赋值时由于是非阻塞所以也是在给次态赋值所以这个周期里干的事都不是这个周期里的而是去确定下个周期的这个周期里的事都在上个周期里确定了也就是说此时的条件都是下个周期的而不是当下的。 所以写的时候就不要想的是串行。而是想写的是一个一个模块根据不同的输入给出不同的输出 就是注意 先到的数据在高位满的时候先从高位出去即FIFO。只是截取高位的时候是从暂存器的低位开始截取的也就是说还是先进的最高位先出去然后输出的时候是先尝试输出再寄存因为寄存的时候不管截不截取它就是全部存进去。但是输出的时候要判断并截取一部分新的 valid_in是判断当前的输出是不是有效如果无效即使输入了要发生一些改变时也不会 之前担心的是如果能输出的时候先在暂存器里输入了一遍结果又在输入里输入了一遍 但实际上这就是为什么要用非阻塞而不是阻塞。即各个模块都是并行的都是并行的即在这个时钟刻里用的都是上个时间里的数值而且不会发生改变。用非阻塞可以不用考虑这样的先后问题如果是阻塞就必须先尝试输出才能暂存 用阻塞也会出问题出时序问题马丹 timescale 1ns/1nsmodule width_24to128(input clk , input rst_n ,input valid_in ,input [23:0] data_in ,output reg valid_out ,output reg [127:0] data_out );reg [3:0] cnt;reg [127:0] data_lock;always(posedge clk or negedge rst_n) beginif(~rst_n)cnt 0;elsecnt ~valid_in? cnt:cnt1;endalways(posedge clk or negedge rst_n) beginif(~rst_n)valid_out 0;elsevalid_out (cnt5 || cnt10 || cnt15)valid_in;endalways(posedge clk or negedge rst_n) beginif(~rst_n)data_lock 0;elsedata_lock valid_in? {data_lock[103:0], data_in}: data_lock;endalways(posedge clk or negedge rst_n) beginif(~rst_n)data_out 0;else if(cnt5)data_out valid_in? {data_lock[119:0], data_in[23:16]}: data_out;else if(cnt10)data_out valid_in? {data_lock[111:0], data_in[23: 8]}: data_out;else if(cnt15)data_out valid_in? {data_lock[103:0], data_in[23: 0]}: data_out;elsedata_out data_out;end endmodule流水线乘法器  流水线 就是采用乘法竖式的思想将乘法转化加法最高位为n则就有n个加法数 用循环简化代码 timescale 1ns/1nsmodule multi_pipe#(parameter size 4 )(input clk , input rst_n ,input [size-1:0] mul_a ,input [size-1:0] mul_b ,output reg [size*2-1:0] mul_out ); wire [2*size-1 : 0] a,b; reg [2*size-1 : 0]temp0,temp1,temp2,temp3; assign amul_a; assign bmul_b; always (posedge clk or negedge rst_n) begin if(!rst_n) begin temp00; temp10; temp20; temp30; end else begin temp0 b[0] ? a : 0; temp1 b[1] ? a1 : 0; temp2 b[2] ? a2 : 0; temp3 b[3] ? a3 : 0; end end always (posedge clk or negedge rst_n) begin if(!rst_n) begin mul_out0; end else begin mul_outtemp0temp1temp2temp3; endend endmoduletimescale 1ns/1nsmodule multi_pipe#(parameter size 4 )(input clk , input rst_n ,input [size-1:0] mul_a ,input [size-1:0] mul_b ,output reg [size*2-1:0] mul_out );//parameter parameter N size * 2;//definationwire [N - 1 : 0] temp [0 : 3];reg [N - 1 : 0] adder_0;reg [N - 1 : 0] adder_1;//output genvar i;generatefor(i 0; i 4; i i 1)begin : loopassign temp[i] mul_b[i] ? mul_a i : d0;endendgeneratealways(posedge clk or negedge rst_n)beginif(!rst_n) adder_0 d0;else adder_0 temp[0] temp[1];endalways(posedge clk or negedge rst_n)beginif(!rst_n) adder_1 d0;else adder_1 temp[2] temp[3];endalways(posedge clk or negedge rst_n)beginif(!rst_n) mul_out d0;else mul_out adder_0 adder_1;end endmodule就是说一个数位数是否为1决定另一个数是否为拓位后的数还是0 状态图实现任意位乘法 2个32位整数相乘实际上是进行了32次加法操作 流程图中x因为需要左移所以32位长度的x应该用一个64位寄存器来存储这样才能保证x左移后不会发生高位丧失。 取绝对值操作 首先是获取符号位然后根据符号位去决定对应的操作 如果是正数就直接赋值不然就先取反再1 输入为mult_begin,拉高后乘法再开始直到运算结束或者人为拉低 需要注意的是右移y那么每次都是去掉y的最低位然后需要在最高位补0即整体往右移动一位这个块就是实现每次都右移一位y 这个是左移x不会丢位因为最多移32次最多就是到最高位 然后这个是判断加数如果此时y的最低位是1那么就加不然就不加为0 符号位确定 循环实现 相同的思路第二种就是用for循环简化了代码 采用移位寄存器同样可以实现上面那个是每次都计算都是从头开始移位i次采用移位寄存器后就是不断复用上一次的结果只移位一次就可以而不是每次都移位i次 用i,i就代表移位的次数可以简便的读取到第i位以及左移i位的结果 流水线是每次都加两个新的 仿真文件 timescale 1ns / 1psmodule tb;// Inputsreg clk;reg mult_begin;reg [31:0] mult_op1;reg [31:0] mult_op2;// Outputswire [63:0] product;wire mult_end;// Instantiate the Unit Under Test (UUT)multiply uut (.clk(clk), .mult_begin(mult_begin), .mult_op1(mult_op1), .mult_op2(mult_op2), .product(product), .mult_end(mult_end));initial begin// Initialize Inputsclk 0;mult_begin 0;mult_op1 0;mult_op2 0;// Wait 100 ns for global reset to finish#100;mult_begin 1;mult_op1 32H00001111;mult_op2 32H00001111;#400;mult_begin 0;#500;mult_begin 1;mult_op1 32H00001111;mult_op2 32H00002222;#400;mult_begin 0;#500;mult_begin 1;mult_op1 32H00000002;mult_op2 32HFFFFFFFF;#400;mult_begin 0;#500;mult_begin 1;mult_op1 32H00000002;mult_op2 32H80000000;#400;mult_begin 0;// Add stimulus hereendalways #5 clk ~clk; endmodule 一些细节  这是两者的位数关系 非流水线设计就是每次乘法运算只输出一个结果
http://www.zqtcl.cn/news/675536/

相关文章:

  • 网站建设付款方式镇江网站设计开发公司电话
  • 萍乡网站制作公司末备案网站如何做cdn
  • 做透水砖的网站西充县企业网站建设
  • 29网站建设全部厦门建设网站建站
  • 列出网站开发建设的步骤高端品牌女装连衣裙
  • 长沙设计网站建设搜索引擎优化平台
  • 网站建设 可以吗打开浏览器的网站
  • 惠州定制网站制作推荐chinacd wordpress第三性
  • 网站建设从初级到精通网站开发成本预算价目表
  • 网站程序开发上海高端网站开发站霸网络
  • 企业网站对网络营销的意义环保材料 技术支持 东莞网站建设
  • 房地产网站建设价格买卖网站
  • 网站宣传方案开发专业网站
  • 电子商务+网站建设wordpress首页幻灯
  • 网站建设表格的属性学校网站建设命名
  • 清远网站建设自学网站开发要多久
  • 可信网站 quot 验证能防范哪些安全.教育类app开发价格表
  • 网站设计服务流程深圳网站设计公司费用大概多少
  • 邮件网站怎么做的本地计算机做网站服务器
  • 自己建的网站打不开html5 手机网站 模版
  • 网站建设跟网站结构如何提高网站排名的方法
  • 网站模板 缓存商标网上开店创业计划书
  • 沧州网站建设微艾薇怎样给企业做网站
  • 如何做淘宝客的网站个人网站设计与制作代码
  • 信用门户网站建设观摩惠州专业做网站
  • wordpress打开网站前广告佛山百度推广seo服务
  • 松北建设局网站vps 用ip可以访问网站么
  • 网站图片内容免费开源crm
  • wordpress调用分类栏目wordpress文章优化
  • 建站公司上海企业官网模板下载