微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于verilog中拼接符的使用疑问,求大神指点

关于verilog中拼接符的使用疑问,求大神指点

时间:10-02 整理:3721RD 点击:
verilog编程可以利用拼接符进行移位操作吗?eg:  assign fcheck={rcheck,fin};//其中fcheck和rcheck都是4位的,fin是一位的,仿真结果是{rcheck,fin}的最高位去掉了赋给 fcheck了,但有一个问题就是 fcheck的变化时受fin异步控制的,没有一个时钟读一次fin的值,是不是可以将这句改成用时钟沿控制以为赋值而不用asign,另外这样使用拼接符是可以综合的吗?  要是不可以综合的话是不是可以用ram将fin串口的数据读进去比较可靠?可是具体的通过ram将数据串行写到12位的缓冲寄存器temp的具体程序怎么写呀?小女子菜鸟一只,望大神赐教,不甚感激!

如果你确实是想你这样做可以的, 语法也没有问题, 也是可以综合的。 但是有风险的是组合逻辑容易引起毛刺, 推荐用时钟沿控制位赋值。 至于将RAM 的数据穿行写到12位缓冲寄存器中, 你可以用SPI将数据读出来, 或者就是用计数器产生地址,将每一个地址的数据读读出来看看更方便也更直观, 推荐用读地址数据的方法来

reg    fcheck_tmp;
reg    fcheck;
always @ ( fin )   fcheck_tmp = rcheck;
always @ ( posedge clk )  fcheck <= fcheck_tmp;

我猜你有个串行的数据源输入(信号叫fin),你想每进来4个bit就作为1组(你叫做fcheck)存入sram,是这样么?然后这个sram存入一定量以后可以进行访问或者其他校验操作
(随手写的,没仔细看有没问题)
e.g:
module check(clk,resetn,din);
input clk;
input resetn;
input din;
reg [3:0] fcheck;
always(posedege clk or negedge resetn);
begin
    if(!resetn)  fcheck <= 4'h0;
    else           fcheck <={fcheck[2:0],din};//left-shift
end
endmodule

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top